首页 > 解决方案 > React redux 正确状态更新

问题描述

我有一个问题,这段代码正确吗?React 中的状态是不可变的,所以这是否正确?

 case "GET_SINGLE":
      const newState = [...state.data];
      const id = action.payload;
     
      const item = newState.filter((item) => item.id === id.id);
   
      return {
        ...state,
        record: item[0],
      };

标签: reactjsreduxreact-redux

解决方案


您的状态具有包含data对象数组的属性record和包含当前对象的属性。如果您正在查看有关国家结构的意见,我认为这是不必要的重复。您可以只保存当前记录的 id 并使用选择器来获取整个对象。在多个地方拥有相同的数据并不好,因为您需要单一的事实来源。

但就这个选择器而言,您正在找到与idfrom匹配的项目并将其action.payload保存到 property record。您只在寻找一项,因此您应该使用find()而不是filter().

使用该变量id.id非常令人困惑。您可以使用解构来仅从id有效负载 ( const {id} = action.payload;) 中获取。或者您可以action.payload.id在比较中使用 ( item.id === action.playload.id)。

 case "GET_SINGLE":
      const {id} = action.payload;
     
      const item = state.data.find((item) => item.id === id);
   
      return {
        ...state,
        record: item,
      };

推荐阅读