首页 > 解决方案 > 如何替换redux中的数组数据?

问题描述

我需要用另一个数组中的新数据替换数组中的一些数据。我执行了一个循环,其中我将某些值中的单词删除为小写。现在我想更新数据,但由于某种原因它没有更新。

const initialState = {
    list: []
};


case Constants.dataNodes.success: {
            const newState = { ...state };

            newState.list = [...newState.list, ...action.payload];


            const filterFQDN = [];

            for (let i = 0; i < newState.list.length; i++) {
                filterFQDN.push(newState.list[i].fqdn.toLowerCase());
            }

            for (let a = 0; a < newState.list.length; a++) {
                for (let b = 0; b < filterFQDN.length; b++) {
                    if (filterFQDN[b] === newState.list[a]) {
                        return newState.list = [...newState.list[a].fqdn, ...filterFQDN[b]];
                    }
                }
            }
          
        }

标签: reactjsredux

解决方案


您可以浅拷贝现有状态,然后将现有 state.list 浅拷贝到一个新数组中,并将有效负载附加到末尾。将此新数组映射到另一个数组,您可以在其中使用toLowerCase()fqdn属性。

case Constants.dataNodes.success: {
  const newState = {
    ...state,
    list: [...state.list, ...action.payload].map((el) => ({
      ...el,
      fqdn: el.fqdn.toLowerCase()
    }))
  };
}

由于您从一个空数组开始,您应该只需要传入toLowerCase的新数据,因此您可以每次映射有效负载而不是整个状态数组。

case Constants.dataNodes.success: {
  const newState = {
    ...state,
    list: [
      ...state.list,
      ...action.payload.map((el) => ({
        ...el,
        fqdn: el.fqdn.toLowerCase()
      }))
    ]
  };
}

推荐阅读