Никогда не возникает проблем с перфомансом при вызове useDispatch()
в любом месте, поскольку это не приводит к повторному рендерингу компонентов.
Вопрос для useSelector
заключается в том, каким компонентам и к каким данным нужен доступ, и какие компоненты будут повторно визуализироваться, если данный бит данных изменится.
В общем, компоненты всегда должны пытаться выбрать наименьшее количество состояния, необходимое для их визуализации.
Оба параметра " «выбрать все данные в родительском» и «выбрать идентификаторы элементов в родительском элементе, выбрать элементы по идентификатору в дочерних элементах» являются жизнеспособными. Если данные в списке могут обновляться довольно часто, вам, вероятно, следует предпочесть выбирать элементы по идентификатору внутри каждого компонента списка.
Однако, если родительский элемент также выполняет повторную визуализацию при изменении любого из отдельных элементов, это приведет к принудительному повторному рендерингу всех компонентов элемента списка, если вы не оптимизируете их активно (например, заключите элементы списка в React.memo()
).
В идеале обновление одного элемента в списке должно либо не приводит к повторному рендерингу родительского элемента, или он выполняет повторный рендеринг, и дочерние элементы запоминаются, поэтому только один элемент списка будет фактически повторно рендерить себя.
Подробнее см. мои сообщения: