Vue 3 相当于 useEffect (React)

ImD*_*ino 11 state store reactjs use-effect vuejs3

这段代码可以工作,但我是 Vue.js 的新手,我忍不住认为有一种更简洁的方法可以做到这一点。

我特别指的是在进入和更新(商店状态)时设置数据的部分,以防它是您访问(或重新加载)的第一页。我有一个商店,在网站加载时从后端获取数据,但这可能是显而易见的。

this.getTodo();当我从watch和打电话时,我只是觉得我在重复自己mounted

<template>
  <div>
    <h2>Details Page</h2>
    {{ title }}
    {{ content }}
    {{ lastEditTime }}
  </div>
</template>

<script>
export default {
  data() {
    return {
      title: '',
      content: '',
      lastEditTime: ''
    }
  },
  methods: {
    getTodo () {
      if (this.$store.state.list.length > 0) {
        const id = this.$route.params.id;
        const todoItem = this.$store.getters.getItem(id);
        Object.assign(this, todoItem);
      }
    }
  },
  watch: {
    '$store.state.list': {
      handler() {
        this.getTodo();
      }
    } 
  },
  mounted () {
    this.getTodo();
  }
}
</script>
Run Code Online (Sandbox Code Playgroud)

sai*_*web 14

为您的观察者添加immediate标志。这样它就可以在安装时以及每次$store.state.list更改时运行。

  watch: {
    '$store.state.list': {
      handler() {
        this.getTodo();
      },
      immediate: true
    } 
  }
Run Code Online (Sandbox Code Playgroud)

更新:

正如@Thomas 所指出的,您还可以使用watchEffecthttps ://v3.vuejs.org/api/compulated-watch-api.html#watcheffect

  • 或者使用 https://v3.vuejs.org/api/compulated-watch-api.html#watcheffect (4认同)