我有一个Vuex商店,我正在注入我的实例:
import store from '../store';
const mainNav = new Vue({
el: '#main-nav',
store,
components: { NavComponent }
});
Run Code Online (Sandbox Code Playgroud)
我正在组件中的该商店创建一个计算属性:
computed: {
isWide() {
return this.$store.state.nav.type === 'wide';
}
}
Run Code Online (Sandbox Code Playgroud)
这确实this.isWide在组件初始化时为模板创建了属性,但是当更新存储值时,组件不会注册它 - 旧值仍在模板上.
我在这做错了什么?
Cod*_*Cat 24
如果您正确设置了所有内容,您的代码应该可以正常工作:http://codepen.io/CodinCat/pen/RKZeZe?edit = 1010
一个非常常见的错误是您没有提供州的初始数据.
您应该明确声明状态形状,而不是
state: {}
// or
state: {
nav: {}
}
Run Code Online (Sandbox Code Playgroud)
做这个:
state: {
nav: {
type: '...'
},
...
}
Run Code Online (Sandbox Code Playgroud)
或者属性不会被动反应,例如:http://codepen.io/CodinCat/pen/ggxBEV?editors = 1010
并确保您确实更新了状态,也许问题只是您未按预期正确更新状态.
sst*_*ten 10
从您的Vuex商店向对象添加新属性时,您应该使用
Vue.set(obj, 'newProp', 123)
Run Code Online (Sandbox Code Playgroud)
或用新的对象替换该对象
state.obj = { ...state.obj, newProp: 123 }
Run Code Online (Sandbox Code Playgroud)
来自Vuex 文档
小智 5
实际上,您需要使用Vue.set()函数使新属性具有反应性。
changeType () {
Vue.set(this.$store.state.nav, 'type', 'wide');
}
Run Code Online (Sandbox Code Playgroud)
请参阅此代码笔:https ://codepen.io/DedicatedManager/pen/JZgpaa
我做了一个关于该主题的全屏视频:youtu.be/8GHczab2Lbs
| 归档时间: |
|
| 查看次数: |
12089 次 |
| 最近记录: |