Vuex - 更新突变中的对象

HTL*_*r99 4 javascript object mutation vue.js vuex

用户单击按钮后,我想用本地对象中的数据替换 vuex 存储中的数据。但我被突变困住了。这是一些代码以了解更多详细信息。

这是用户单击按钮后调用的方法。(this.tableview是一个本地对象,与vuex对象具有相同的值)

            updateVuexTableview() {
                // eslint-disable-next-line no-console
                console.log("Update Vuex Table view");
                this.updateTableview(this.tableview)
            }
Run Code Online (Sandbox Code Playgroud)

在这个方法中我的 vuex 动作被调用。看起来像这样:(updTableview是我要插入的新数据)

async updateTableview({commit}, updTableview) {
        const response = await axios.put(
            `http://localhost:3000/tableview`,
            updTableview
        );

        // eslint-disable-next-line no-console
        console.log(response.data);

        commit('updateTableviewMut', response.data);
    },
Run Code Online (Sandbox Code Playgroud)

这就是所谓的突变。这就是我被困住的地方。我尝试弹出数据并再次推送它,但到目前为止没有任何效果。

    updateTableviewMut: (state, updTableview) => {
        state.tableview.push(updTableview)
    },
Run Code Online (Sandbox Code Playgroud)

这就是我的状态:

const state = {
    tableview: {
        "thema_c": true,
        "status_c": true,
        "priority_c": true,
        "custom1_c": true,
        "custom2_c": true,
        "customFieldName1": "Custom1",
        "customFieldName2": "Custom2"
    },
};
Run Code Online (Sandbox Code Playgroud)

小智 5

.push您无法通过重新分配对象或设置特定字段来更新对象。只需像这样更改您的代码:如果您想添加键值对,您可以执行以下操作:

updateTableviewMut: (state, updTableview) => {
  state.tableview['keyname'] = updTableview
}
Run Code Online (Sandbox Code Playgroud)

或者,如果你想重新分配一个对象,你可以这样做:

updateTableviewMut: (state, updTableview) => {
  state.tableview = updTableview
}

Run Code Online (Sandbox Code Playgroud)