如何使用 vuex 进行响应式更新
How to use vuex for reactive updates
一般来说,Vuex 和 Vue 都是新手,我很难理解如何使用 Vuex "reactively"。同事尝试解释但没有做得很好或者我只是很笨,但他说可以观察商店的反应性更新以重新粉刷您的 UI.
我想我明白了计算属性背后的想法,比如它将与其函数体一起使用的属性包装在回调或其他东西中,并将在任何这些更改时重新评估整个函数。 Vuex 如何发挥作用?我看到了一些例子,比如商店的状态、吸气剂和突变
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
}
}
我需要手动调用它以防止反应。我需要映射函数吗?
Do I need the mapper functions?
他们很有帮助,是的。他们将通过将 getters 包装在计算的 属性.
中来收集它们
您也可以自己手动完成,但是您现有的代码试图将 getter 包装为一个方法。这是错误的,因为您没有 "call" getter。 Getters 是 Vuex 上下文中的 "computed" 属性。我不知道为什么它们的名称不同。但手动包装会喜欢:
computed: {
user() {
return this.$store.getters.getUser;
}
}
这基本上就是 mapGetters
为您所做的。然后您的组件只引用 this.user
编辑:
此外,当您以某种方式转换数据时,通常会使用 getters。在您的情况下,如果您只需要在 Vuex 状态下引用 user
,只需使用 mapState
代替:
computed: {
...mapState(['user']) // reference as this.user
}
如果我没有正确理解你的问题,Vuex 的反应性类似于 Vue 中的 computed
属性。考虑以下因素:
<template>
<h2>{{ user }}</h2>
</template>
<script>
export default {
computed: {
// getters from store
user () {
return this.$store.getters.getUser
}
}
</script>
只要 user
在商店中发生变化,计算出的 属性 user
的值也会发生变化。
一般来说,Vuex 和 Vue 都是新手,我很难理解如何使用 Vuex "reactively"。同事尝试解释但没有做得很好或者我只是很笨,但他说可以观察商店的反应性更新以重新粉刷您的 UI.
我想我明白了计算属性背后的想法,比如它将与其函数体一起使用的属性包装在回调或其他东西中,并将在任何这些更改时重新评估整个函数。 Vuex 如何发挥作用?我看到了一些例子,比如商店的状态、吸气剂和突变
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
}
}
我需要手动调用它以防止反应。我需要映射函数吗?
Do I need the mapper functions?
他们很有帮助,是的。他们将通过将 getters 包装在计算的 属性.
中来收集它们您也可以自己手动完成,但是您现有的代码试图将 getter 包装为一个方法。这是错误的,因为您没有 "call" getter。 Getters 是 Vuex 上下文中的 "computed" 属性。我不知道为什么它们的名称不同。但手动包装会喜欢:
computed: {
user() {
return this.$store.getters.getUser;
}
}
这基本上就是 mapGetters
为您所做的。然后您的组件只引用 this.user
编辑:
此外,当您以某种方式转换数据时,通常会使用 getters。在您的情况下,如果您只需要在 Vuex 状态下引用 user
,只需使用 mapState
代替:
computed: {
...mapState(['user']) // reference as this.user
}
如果我没有正确理解你的问题,Vuex 的反应性类似于 Vue 中的 computed
属性。考虑以下因素:
<template>
<h2>{{ user }}</h2>
</template>
<script>
export default {
computed: {
// getters from store
user () {
return this.$store.getters.getUser
}
}
</script>
只要 user
在商店中发生变化,计算出的 属性 user
的值也会发生变化。