Redux减速器:items.map不是函数

1dkrff03  于 2023-03-18  发布在  其他
关注(0)|答案(1)|浏览(130)

这是一个有学习目的的问题,我陷入了一个特定的方法。我玩了一点Redux来学习它,我有一个关于我的代码的一部分的问题。假设我有一个组件,我作为一个截图附加,这是非常简单的。

这个项目属性是一个4个键值对的对象(uuid,quantity,price,name)。我尝试用两种方法更新数量。一种成功,一种不成功。
在减速器中,这是:

if (action.type === QUANTITY_UPDATED) {
    return state.map((item) => {
      console.log(item);
      if (item.uuid === action.payload.uuid) {
        return { ...item, quantity: action.payload.quantity };
      }
    
      return item;
    });
   };

但这不会返回我提到的错误.map不是一个函数.这可能是一个愚蠢的错误,我正在做,但不能弄清楚.任何输入?

if (action.type === QUANTITY_UPDATED) {
    const item = state.find((item) => item.uuid === action.payload.uuid);
    return { ...item, quantity: action.payload.quantity };
  }

另外,要确定在Redux还原器中,我不能改变属性。这会是原因吗?

mznpcxlj

mznpcxlj1#

啊,现在我知道问题所在了。你总是应该从你的reducer返回相同类型的状态。
在这里,您将从reducer返回一个数组:

if (action.type === QUANTITY_UPDATED) {
    return state.map((item) => {
      console.log(item);
      if (item.uuid === action.payload.uuid) {
        return { ...item, quantity: action.payload.quantity };
      }
    
      return item;
    });
   };

但在这里,您返回的是一个对象:

if (action.type === QUANTITY_UPDATED) {
    const item = state.find((item) => item.uuid === action.payload.uuid);
    return { ...item, quantity: action.payload.quantity };
  }

对象不是数组。
下一次你试图更新状态时,你的reducer无论如何都会被破坏,因为它期望状态是在数组中。
如果状态是数组,则需要始终从reducer返回数组

相关问题