Решения № 1 и № 2 прекрасно, потому что в этом случае ElementItem
является компонентом представления и получает свои данные от реквизита.
Решение № 3 не имеет смысла, потому что компонент, зацикливающийся на коллекции, уже получил часть состояния состояния (либо потому, что этот компонент подключен к Redux, либо потому, что он получил его от props).
В документации по редуксу есть пример , где они отображают коллекцию задач: они используют 2 компонента представления: Todo
, один элемент задачи и TodoList
, список, показывающий задачи , Затем есть контейнерный компонент, VisibleTodoList
, который вычисляет список видимых задач из состояния и отображает их, используя TodoList
. Вы можете использовать ту же стратегию, когда хотите перебрать коллекцию.
Еще один момент: если вы не хотите использовать find
для получения нужного элемента, вы можете нормализовать ваше состояние , поэтому каждая «таблица сбора» хранит элементы в объекте с идентификаторами из предметов в качестве ключей. Таким образом, вы можете получить правильный предмет, как это:
const element = state.collection[elementId];