簡體   English   中英

當調用動作時,如何在反應 redux 中更改數組中 object 的值?

[英]How can I change the value of an object in an array in react redux when the action is called?

這是當它被調用時獲得一個 id 的操作,因此它可以在減速器中過濾具有相同 id 的 object。

export const buyItem = (24) => {
    return {
        type: BUY_ITEM,
        payload: 24
    };
};

這是reducer文件中的產品數組

    products: [
        {
            id: 1,
            price: 4500000,
            number: 0,
            inCart: false
        },
        {
            id: 24,
            price: 7210000,
            number: 0,
            inCart: false
        },
        {
            id: 10,
            inCart: false,
            category: 'electronics',
            number: 0,
        }
]

這是我過濾產品過濾器的減速器操作案例,然后我嘗試更新 inCart 和它的數值

    switch (action.type) {
        case BUY_ITEM:
            let item = state.products.filter((item) => {
                if (item.id === action.payload) {
                    return item;
                }
            });

            console.log(state.products);

            return {
                ...state,
                productsInCart: state.productsInCart + 1,
                cartPrice: state.cartPrice + item[0].price,
                products: [
                    ...state.products,
                    state.products.map((item) => {
                        if (item.id === action.payload) {
                            item.inCart = true;
                            item.number += 1;
                        }
                    })
                ]
            };

問題是它沒有正確執行它實際上成功地更改了 object 值但是當操作完成后控制台日志發生時它向我顯示:

21: {id: 19, nam, number: 0, …}
22: {id: 22,  number: 0, …}
23: {id: 23, n,…}
24: {id: 25, name: "Adidas کیف", pric دهید", number: 0, …}
25: (25) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
26: (26) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
27: (27) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
28: (28) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
29: (29) [undefined, undefined, undefined, undefined, {…}, undefined, undefined, undefined, undefined,  undefined, undefined]
30: (30) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
31: (31) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, {…}, undefined, undefined, undefined, undefined]

它基本上將多個 null arrays 添加到產品數組的末尾,這就是我所看到的不是我想要的。 調用操作時,如何正確更新數組中對象的值?

產品被復制(傳播)回自身,然后還將映射的產品嵌套到其中(未定義的值來自未返回/映射到新值)。 您可以簡單地將新產品設置映射的產品數組。

products: state.products.map((item) => {
    const newItem = { ...item }; // copy item
    if (item.id === action.payload) { // update if id matches
      newItem.inCart = true;
      newItem.number += 1;
    }
    return newItem; // return copied item
  })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM