Есть ли шаблон замены React (состояние) для паба при замене Redux? - PullRequest
0 голосов
/ 01 мая 2020

Мне кажется, что тенденция состоит в том, чтобы заменить Redux на React Context API и useReducer.

Лично мне не нравится огромный магазин в root с состояниями из пользовательских данных, если диалоговое окно открыто все смешано вместе.

Переход на React Context API позволил мне вывести sh состояние вниз и приблизиться к тому месту, где они будут использоваться. Однако я могу только до sh до уровня, когда дочерние компоненты либо отображают, либо изменяют это значение. Например:

<Parent>
  <CounterDisplay/>
  <CounterIncreaseButton/>
</Parent>

Я должен рассчитывать на Родителя и создать Контекст. В контексте я добавлю значение счетчика и метод увеличенияCount (или состояние и функцию диспетчеризации при использовании шаблона редуктора). Затем я предоставляю контекст этим двум дочерним компонентам. Теперь его можно отобразить, а можно изменить.

А что, если мне понадобится еще одна кнопка, расположенная далеко от этой части дерева компонентов, которая также должна изменить значение счетчика? Я должен поднять состояние и, возможно, полностью до root. Это кажется мне странным.

2-ая проблема - когда состояния разбросаны по нескольким уровням вдоль пути в дереве, когда что-то происходит, скажем, пользователь нажимает кнопку, вам может потребоваться вызвать несколько функций из нескольких контекстов (или отправить несколько действий, по одному для каждого состояния, которое может изменяться или не изменяться). В отличие от использования Redux, поскольку все находится на root, вам просто нужно отправить одно действие.

Так что, если вместо этого у меня есть событие pub / sub на уровне root? Я могу сделать так, чтобы состояние счетчика и код манипулировали им еще больше в CounterDisplay. CounterDisplay необходимо подписаться на систему pub / sub, прослушать событие и обновить счетчик соответственно. И какой бы компонент не захотел изменить счетчик, он может просто вызвать событие.

Чего мне не хватает в этом шаблоне? Циркулярное событие л oop? Поднять условия? Чувствует себя хорошим пабом / саб библиотека может предотвратить это Я огляделся и не нашел чего-то существующего. Я посмотрел на Rx JS, но не чувствую, что он подходит.

Заранее благодарен за то, что поделился своими мыслями.

Ответы [ 2 ]

3 голосов
/ 01 мая 2020

Вы в основном только что описали точную причину существования Redux:)

Redux - это"событие pub / sub на уровне root", и оно может быть полезно в тех случаях, когда широко разнесенные компоненты должны использовать одни и те же данные.

Возможно, вы захотите прочитать мой пост Redux - еще не умер! , в котором описано, как Redux вписывается в современную экосистему. (включая сравнение с контекстом) и некоторые причины, по которым вы можете найти это полезным.

0 голосов
/ 01 мая 2020

Если вы отстранены от лишнего на количество шаблонов. Я бы посоветовал взглянуть на redux-zero.

Под капотом. react-redux использует поставщика контекста на root. Когда вы используете connect Higher-Order-Component, который использует context. То же самое с хуками редуксов.

Так что вполне нормально иметь провайдера на самом верху. Для любой библиотеки, такой как react-router, было бы то же самое.

Я бы посоветовал вам продолжать без редукций, чтобы вы могли больше узнать. Поставьте провайдера на root. В любом случае это не повлияет на производительность. Изоляция создаваемого вами контекста и поставщика в одноэлементный файл и импорт его в нужные вам компоненты

...