【问题标题】:Vuex: Weird question on weird behavior of vuex. I need at least one mutation and a commit to update or assign to my store objectsVuex:关于 Vuex 的奇怪行为的奇怪问题。我需要至少一个突变和一个提交来更新或分配给我的商店对象
【发布时间】:2019-01-16 11:19:38
【问题描述】:

我正在尝试将令牌设置为我的 store.token 我知道这不是不使用突变的最佳选择,但我正在做这样的事情:

methods : {
        molestor(){
            const self = this;
            this.$store.state.token = "new token";
            this.$store.state.cleavage= "yes";
            this.$store.commit('settoken', "somethingrandom");
        },  
}

然后在我的 store.js 上:

export const store = new Vuex.Store({
    state : {
        token : '',

    },
    mutations : {
        settoken(state,token){
            console.log(token);
        }
    }
});

现在它工作正常......它设置。但是当我从store.js 中删除突变或删除我的molester() 上的提交时,它不会将值分配给令牌。为什么会这样?

【问题讨论】:

  • 真的不一样。我没有收到任何错误。问题是我不需要commit 一个可以设置我价值的突变。我没有用突变设置我的商店数据。我正在做正常的方式。当我删除没有做任何事情的突变时,我无法设置存储值。 @AnaLizaPandac 这就是为什么我首先说奇怪。感谢您的帮助
  • 你不应该那样做:这不是 VueX 应该如何工作的,你设法让它工作可能只是一个怪癖,并且不能保证它会在所有情况下都工作时间。就像它的名字所暗示的那样,坚持使用突变来改变你的 VueX 商店中的状态。

标签: vue.js vuejs2 vuex vue-router


【解决方案1】:

要在 store 中设置 state 的值,我们必须通过 mutation/commits 与 Vuex api 交互。

通过尝试设置没有突变的状态,这违背了 Vuex 的设计(具有可管理的存储/状态)

通常尝试在没有突变的情况下设置状态(例如在操作中)会引发错误,但我也相信通过“$store.state”获取状态只会返回状态(而不返回状态实例) )

这样做是为了在整个应用程序状态中保持不变性

【讨论】:

  • 虽然您是正确的,但突变应该用于设置状态。直接设置状态没有突变可以正常工作并且不会抛出错误。
【解决方案2】:

如果您希望看到更改出现在 Vue 开发工具中,您将不会看到任何状态更改,除非它们通过突变发生或直到调用另一个突变。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2021-12-31
    • 2020-04-21
    相关资源
    最近更新 更多