【问题标题】:Vuex state not consisting after reload重新加载后Vuex状态不包含
【发布时间】:2021-11-26 13:18:56
【问题描述】:

我使用一个连接到 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);

赋值前后的值完全相同。

因此,我是否使用该突变并不重要。但是当删除它,然后刷新页面时,商店又回到了重新排列列表元素之前的状态。

【问题讨论】:

  • 如果 CHECK_ORDER 是您在操作中使用的唯一突变,那么当您删除它时会发生什么?
  • @StevenSiebert 我希望状态(列表)在没有该突变的情况下更新,这是它应该具有的反应性的原因。导致尽管将其记录到控制台,但该突变并没有做任何事情。
  • 这不是你应该如何使用vuex。您需要通过突变传递新状态,否则它不会被持久化。
  • @StevenSiebert 好的,那我就那样做。谢谢。就像我已经在问题中那样做就可以了吗?还是应该将新状态保存在单独的对象中?

标签: vue.js vuex vuejs3


【解决方案1】:

正如目前所写,您不会在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;
}

【讨论】:

  • 我正在使用 SortableJS/vue.draggable.next 重新排列元素。这使得它稍微困难一些。
  • @TKsomewhat 根据git 上的文档,可以使用:move="checkMove" 调用函数。您可以在其中添加dispatch
  • 那么我如何将列表绑定到一个对象而不直接在商店之外对其进行变异呢?你提到目前我正在这样做。
  • 我假设您已经在商店的其他模块中执行此操作(如果有的话)。我会尝试通过快速提示来编辑我的答案。
  • 好的,谢谢!状态的副本正是我当时所需要的。但它不会使计算属性的使用变得不必要吗?
猜你喜欢
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
  • 2021-09-26
  • 2021-06-19
  • 2019-11-30
  • 2019-07-30
相关资源
最近更新 更多