javascript - 如何使用 vuex 进行响应式更新

标签 javascript vue.js vuex

总的来说,对于 Vuex 和 Vue 来说,我很难理解 Vuex 是如何“响应式”使用的。同事尝试解释,但没有做得很好,或者我只是很笨,但他说可以观察商店的 react 性更新来重新绘制你的 UI。

我想我明白了计算属性背后的想法,就像它将与函数体一起使用的属性包装在回调或其他东西中,并且会根据任何这些更改重新评估整个函数。 Vuex 是如何发挥作用的?我看到一些示例,例如商店的状态、 setter/getter 和突变

state: {
    user: null,
    role: null
},
getters: {
    getUser: state => state.user,
    getRole: state => state.role,
},
mutations: {
    setUser: ({state}, user) => {
        state.user = user
    },
    setRole: ({state}, role) => {
        state.user = role
    }
}

我只是没有弥合它与能够进行 UI 更新的组件之间的差距。我是否设置方法或类似我提到的可观察回调之类的东西?

methods: {
    getUserFromStore () {
        return this.$store.getters.getUser
    }
}

我需要手动调用它,因此它不利于 react 性。我需要映射器功能吗?

最佳答案

Do I need the mapper functions?

是的,他们非常有帮助。他们将通过将 setter/getter 包装在计算属性中来将 setter/getter 向下漏斗。

您也可以自己手动执行此操作,但您现有的代码正在尝试将 getter 包装为方法。这是错误的,因为您没有“调用” setter/getter 。 Getter 是 Vuex 上下文中的“计算”属性。我不知道为什么它们的命名不同。但手动换行会喜欢:

computed: {
    user() {
        return this.$store.getters.getUser;
    }
}

这本质上就是 mapGetters 为您所做的事情。然后您的组件只需引用 this.user

编辑:

此外,当您以某种方式转换数据时,通常会使用 getter。在您的情况下,如果您只需要在 Vuex 状态下引用 user,只需使用 mapState 即可:

computed: {
   ...mapState(['user']) // reference as this.user
}

关于javascript - 如何使用 vuex 进行响应式更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48693320/

相关文章:

javascript - Firefox 不会更新对 CSS 动画的更改

javascript - Vue.js - this.$refs.key 返回一个空数组或未定义而不是元素

javascript - 如何阻止模态直到 api 请求得到解决

vue.js - sass-loader 9.0.x & vue : ValidationError: Invalid options object. Sass Loader 已使用选项对象初始化

javascript - 如何获取所有已注册的 Vuex 模块

vue.js - vuex:未知的 getter:文章

javascript - 当使用这些 UTC 秒再次转换为日期时,当前日期的 UTC 秒数应给出 UTC 日期。

javascript - Gulp 依赖任务

javascript - 为什么 qTip 工具提示不保持打开状态以便我可以单击它的链接?

url - vuejs 历史模式路由