React Native:指定在reducer中修改哪个数组项(使用React Immutability helpers)

问题描述 投票:0回答:1

我目前正在导入这个库:

import update from 'react-addons-update';

这是我的清单:

[{id:1,title:“some title”},{id:2,title:“some other title”}]

我的行动:

action.type:'change_title' action.payload:[2,“一些新标题”]

action.payload中的第一个参数是指我想要更改的数组的id

这是我的reducer代码:

export default (state = [], action) => {
  switch (action.type) {
    case 'change_title':
      return update(state, {
        0: {
          title: { $set: action.payload[1] }
        }
      });
    default:
      return state;
  }
};

正如您所看到的,在它的当前状态下,我的reducer函数总是更改第一个数组中的“title”值,但我想知道:如何根据“id”值指定要修改的数组?

arrays react-native redux immutability reducers
1个回答
1
投票

你至少可以通过两种方式来做到这一点。首先,使用update(),您需要使用Array.prototype.findIndex()找到要更新的项的索引:

const index = state.findIndex(x => x.id === action.payload[0]);

case 'change_title':
  return update(state, {
    [index]: {
      title: { $set: action.payload[1] }
    }
  });

或者只是使用地图:

case 'change_title':
    return state.map(item ==> {
        if(item.id !== action.payload[0]) {
            return item;
        }

        return {
            ...item,
            title: action.payload[1]
        };
    });    
© www.soinside.com 2019 - 2024. All rights reserved.