Руководство по стилю redux - это просто руководство по стилю. Даже если они рекомендуют перебирать список идентификаторов, если у вас есть список компонентов, вы можете перебирать его.
Единственная «проблема» здесь в том, что ваше приложение может со временем становиться все более и более сложным, и может быть трудно поддерживать его позже.
Если вы все еще хотите найти сообщение по идентификатору, метод find
хорош и не должен вызывать проблем c, если у вас нет сотен элементы в вашем магазине.
Если вы хотите использовать второе решение, вы можете преобразовать свой магазин в редукторе примерно так:
function reducer(action, state) {
switch (action.type) {
case 'YOUR_CASE': {
return {
...state,
- itemList: action.itemList,
+ itemList: Object.fromEntries(
+ action.itemList.map(item => ([item.id, item]))
+ ),
}
}
}
}
У вас будет такой объект в вашем магазине:
{
1: {
id: 1,
title: 'some item',
},
2: {
id: 2,
title: 'some other item',
},
}
Обратите внимание, что Object.fromEntries
- это только недавний API , вы можете захотеть заполнить его полифилом.
Конечно, вам нужно измените все вызовы, которые использовали itemList
в качестве массива до этого:
- itemList: state.itemList,
+ itemList: Object.values(state.itemList),