vue.js - 重新加载后Vuex状态不包含
问题描述
我使用连接到 vuex 存储的可排序列表并得到它:
let nested = computed({
get: () => {
return store.getters.getItems;
}
});
当现在改变元素的顺序时,商店应该反应性地适应。console.log
在商店内做类似的事情时:
console.log(state.line_items_attributes.nested_form);
var temp = cloneDeep(data.nested_form);
state.line_items_attributes.nested_form = temp;
console.log(state.line_items_attributes.nested_form);
赋值前后的值完全相同。
因此,我是否使用该突变并不重要。但是当删除它,然后刷新页面时,商店又回到了重新排列列表元素之前的状态。
解决方案
正如目前所写的那样,您不会在 中改变您的状态vuex
,而是在您的商店之外改变它,这是错误的做法。在这种情况下,响应性是从存储到组件的,而不是相反。
在您的情况下,要使用新顺序更新您的状态,您只需像您可能已经在其他突变中所做的那样进行操作:
CHECK_ORDER: (state, data) => {
state.line_items_attributes = data;
console.log(state.line_items_attributes);
}
否则,在突变之外进行突变时,您还应该收到以下错误:
Error: [vuex] do not mutate vuex store state outside mutation handlers.
快速提示:使用您所在州的副本
如果您需要先在商店之外操作某些东西,然后想改变状态,您可以像这样得到它:
this.localItems = JSON.parse(JSON.stringify(store.getters.getItems))
在这种情况下localItems
,不会引用您在商店中的状态。正如所指的,vue.draggable.next提供了几个事件,您可以localItems
在这样做的同时将排序的对象分派到商店。
您可以在Events |中查看这些事件。vue.draggable.next
小例子:
// HTML
<draggable :list="list" @end="onEnd">
// Function
onEnd() {
this.$store.dispatch('myAction', this.localItems)
}
// vuex Action
myAction({commit}, newItems) {
commit('UPDATE_MY_ITEMS', newItems);
}
// vuex Mutation
UPDATE_MY_ITEMS(state,payload) {
state.items = payload;
}
推荐阅读
- bixby - 不确定如何使用新信息更新结构
- javascript - 在上传之前预览多个图像
- animation - 约束动画未按预期动画
- sql - 如何在不破坏 SQL 逻辑的情况下将 JOINS 转换为子查询
- python - 避免在大型数据集上使用智能点/matmul 进行迭代
- python-3.x - 如何修复'RuntimeError: Locator ...超过 Locator.MAXTICKS - matplotlib'
- mongodb - Mongodb聚合推送文档数组字段与子文档数组字段以嵌套方式
- python - 如何使用 Pulp Gekko 和 Scipy 包修复具有不同结果的代码以解决线性优化问题?
- background - 如何逐渐模糊背景?
- python - 如何在 Python 中获取多个字符输入并对其进行处理