为什么我承诺将状态的数据设置为空,组件状态不会改变 util 我刷新页面?
Why I commit to set the state's data to null, the component state do not change util I refresh the page?
在我的 store.js
:
state: {
...
user_info: LocalStorageUtil.get('user_info')
},
mutations: {
set_user_info_null(state){
state.user_info = null
}
}
在我的组件中:
// in the template
<div v-if="user_info" class="welcome">
<a @click="welcome_username">欢迎您,{{user_info.username}}!</a>/<a @click="logout">退出</a>
</div>
// in the script
data(){
return {
user_info: this.$store.state.user_info,
...
}
methods: {
...
... // in the logout method
LocalStorageUtil.clear('user_info')
this.$store.commit('set_user_info_null') // store set to null
你看,我先清空user_info
,然后Vuex commit set_user_info_null
。 Vuex 的状态 user_info 将被设置为 null
.
但是,在组件的数据中,user_info 仍然是对象:
编辑-1
如果我使用代码:
import { mapState } from "vuex";
export default {
computed: {
...mapState("user_info")
}
};
我收到一个错误:
TypeError: undefined is not an object (evaluating 'Object.keys(map)')
在这一行中:
computed: {
...mapState("user_info")
},
components: { // in this line
...
这部分在你的组件中有问题
data(){
return {
user_info: this.$store.state.user_info,
...
}
您正在声明一个与 Vuex 存储区分开的本地组件状态。当你更新 Vuex 商店时,这不会改变。
正确的方法是使用mapState
import { mapState } from "vuex";
export default {
computed: {
...mapState(["user_info"])
}
};
就像您将 user_info
作为 prop
传递给此组件一样。当 Vuex store 更新时,这个组件也会更新。
在较新的(高于 v.2.3.4 )版本 Vue.js 中,如果您的代码中有 this.user_info=xxx
:
,代码将检查集合
您可以检查source code。
因此,首先我会建议您将 this.$store.state.user_info=xxx
替换为 this.user_info=xxx
。
其次你应该看看 Two-way Computed Property
computed: {
message: {
get () {
return this.$store.state.user_info
},
set (value) {
this.$store.commit('set_user_info_null')
}
}
}
在我的 store.js
:
state: {
...
user_info: LocalStorageUtil.get('user_info')
},
mutations: {
set_user_info_null(state){
state.user_info = null
}
}
在我的组件中:
// in the template
<div v-if="user_info" class="welcome">
<a @click="welcome_username">欢迎您,{{user_info.username}}!</a>/<a @click="logout">退出</a>
</div>
// in the script
data(){
return {
user_info: this.$store.state.user_info,
...
}
methods: {
...
... // in the logout method
LocalStorageUtil.clear('user_info')
this.$store.commit('set_user_info_null') // store set to null
你看,我先清空user_info
,然后Vuex commit set_user_info_null
。 Vuex 的状态 user_info 将被设置为 null
.
但是,在组件的数据中,user_info 仍然是对象:
编辑-1
如果我使用代码:
import { mapState } from "vuex";
export default {
computed: {
...mapState("user_info")
}
};
我收到一个错误:
TypeError: undefined is not an object (evaluating 'Object.keys(map)')
在这一行中:
computed: {
...mapState("user_info")
},
components: { // in this line
...
这部分在你的组件中有问题
data(){
return {
user_info: this.$store.state.user_info,
...
}
您正在声明一个与 Vuex 存储区分开的本地组件状态。当你更新 Vuex 商店时,这不会改变。
正确的方法是使用mapState
import { mapState } from "vuex";
export default {
computed: {
...mapState(["user_info"])
}
};
就像您将 user_info
作为 prop
传递给此组件一样。当 Vuex store 更新时,这个组件也会更新。
在较新的(高于 v.2.3.4 )版本 Vue.js 中,如果您的代码中有 this.user_info=xxx
:
您可以检查source code。
因此,首先我会建议您将 this.$store.state.user_info=xxx
替换为 this.user_info=xxx
。
其次你应该看看 Two-way Computed Property
computed: {
message: {
get () {
return this.$store.state.user_info
},
set (value) {
this.$store.commit('set_user_info_null')
}
}
}