Vuex:如何更新该对象中的唯一元素?

时间:2019-01-22 12:20:35

标签: javascript vue.js vuejs2 vue-component vuex

借助其他堆栈溢出问题,我到现在为止。 基本上,它将返回更新单个ID的新数组。 但是我的store state没有更新为什么? 这是我的state对象:

allProducts:[
            {
                "product_name": '',
                "code": '',
                "id": ''

            }
        ],

这是我的mutation

UPDATE_PRODUCT : ({allProducts},payload) =>{
            let updatedProducts = allProducts.map(product => {
                if(product.id === payload.id){
                    return Object.assign({}, product, payload);
                }
                return product;
            })
            allProducts = updatedProducts;
        }

如果我console.log(updatedProducts),我的情况result很好。但是我的allProducts没有更新。

2 个答案:

答案 0 :(得分:2)

您缺少state作为突变方法中的第一个参数:

state:{
    allProducts:[
        {
            "product_name": '',
            "code": '',
            "id": ''

        }
    ]  
}

和突变:

 UPDATE_PRODUCT : (state,payload) =>{
        let updatedProducts = state.allProducts.map(product => {
            if(product.id === payload.id){
                return Object.assign({}, product, payload);
            }
            return product;
        })
        state.allProducts = updatedProducts.slice();
    }

答案 1 :(得分:1)

您要在此处替换参考,而丢失原始参考

allProducts = updatedProducts;

相反,您应该对其进行变异

allProducts.length = 0;
Array.prototype.push.apply(allProducts, updatedProducts);