javascript - 列表渲染中的 Vuex 和 react 性

标签 javascript vue.js vuex

所以我有一个简单的商店:

const state = {
    cart: []
};

这是购物车在有元素时的样子:

[
    {
        id: 1,
        name: 'My first product',
        price: 3,
        quantity: 3
    },
    {
        id: 2,
        name: 'My second product',
        price: 2,
        quantity: 7
    }
]

这是我对这个对象的修改:

ADDPRODUCTTOCART (state,product,quantity) {
    for(var i = 0; i < state.cart.length; i++) {
        if(state.cart[i].id === product.id) {
            state.cart[i].quantity += quantity;
            return ;
        }
    }
    product.quantity = quantity;
    state.cart.push(product);
}

如您所见,将产品添加到购物车时,我首先检查购物车中是否已存在相同的产品。如果是,我们更改 quantity 值。如果不是,我设置产品对象的数量属性,然后将其推送到购物车。

供您引用,以下是触发此突变的操作的编写方式:

export const addProductToCart = ({dispatch}, product, quantity) => {
    dispatch('ADDPRODUCTTOCART', product, quantity);
};

然后,我有一个组件:

export default {
    computed: {
        total() {
            var total = 0;
            for(var i = 0; i < this.cart.length; i++) {
                total += this.cart[i].price * this.cart[i].quantity;
            }
            return total;
        }
    },
    vuex: {
        getters: {
            cart: function (state) {
                return state.cart;
            }
        }
    }
}

total 计算属性运行良好,当我更改 cart 中的 product 对象的数量时,它会自行更新。

但是如果我尝试在 v-for 列表中显示此 quantity 属性,它不会在 quantity 更改时更新:

<li v-for="product in cart" track-by="id">
    productID: {{ product.id }},
    quantity: {{ product.quantity }}
</li>

https://jsfiddle.net/Lgnvno7h/2/

最佳答案

如果你想从组件的data传递数据,你应该移除观察者:

JSON.parse(JSON.stringify(this.products[0]))

关于javascript - 列表渲染中的 Vuex 和 react 性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37818570/

相关文章:

javascript - 将新代码注入(inject) DOM 的最佳方式是什么?

vue.js - 未捕获的类型错误 : VueRouter is not a constructor

vue.js - vuex:为什么从命名空间模块内调用突变需要前缀?

javascript - 我应该在哪个端口上运行我的 Socket.IO 服务器?

javascript - react : Fetching data from inputs using createRef

javascript - dhtmlxgantt 填充嵌套 JSON 数据

typescript - 如何在 vuex 存储 typescript 中动态设置对象的属性(同时保持类型安全)

javascript - 从服务器加载 pdf 并嵌入 Vue 应用程序

javascript - 将数据从表传递到模态形式

javascript - 从组件内部创建的 FullCalendar 对象访问 Vue 组件对象