Я думаю, что вам нужно знать не столько «Каково состояние дел», сколько «Каков канонический способ» публикации и подписки на React и Redux.
Краткий ответв том, что если у вас достаточно сложное приложение, вы должны организовать свой магазин так, чтобы состояние приложения было разделено на ломтики и использовать шаблон контейнера для разделения ответственности за публикацию и подписку.Таким образом вы избежите упомянутой проблемы, когда вы не знаете, что в кодовой базе меняет хранилище и что реагирует на изменения.Вы можете посмотреть на компонент контейнера и посмотреть, как он обрабатывает события пользовательского интерфейса от своих дочерних элементов и создает событие изменения состояния.Или вы можете увидеть, как контейнер обрабатывает изменение состояния, а затем развернуть иерархию.Если вы можете сделать так, чтобы срез Redux отвечал за один контейнер, гораздо проще думать о событиях.Все остальные компоненты не подписаны на события как таковые, вместо этого они получают изменения, которые им необходимо визуализировать, от реквизитов, происходящих из компонента контейнера.И они уведомляют компонент контейнера о своих собственных событиях через обратные вызовы, передаваемые через реквизиты, чтобы контейнер мог их опубликовать.Это может пройти долгий и долгий путь, и если вы чувствуете, что вам нужно передавать реквизит слишком много уровней, вы можете использовать React.children
, чтобы немного сгладить вложение, или в редких случаях контекст.
Более длинный ответ немного сложнее, поскольку публикация и подписка не имеют большого смысла, если говорить о React.React должен в конечном итоге отвечать за рендеринг.Как вы упомянули, не все события являются событиями пользовательского интерфейса.Но если вы моделируете вещи так, что все события, которые вы можете публиковать и подписывать, сводятся к смене магазина или реагированию на смену магазина, то вы можете создать свое приложение, ориентированное больше на Redux.Управление запросами и результатами, о которых вы говорите, должно осуществляться в простых модулях JavaScript без React.Затем вы можете использовать компонент контейнера, чтобы склеить хранилище с этим модулем.
Существуют дополнительные шаблоны, которые люди используют, например, создатели действий и селекторы.Это хорошо, потому что, по крайней мере, цель состоит в том, чтобы держать кодовые базы знакомыми.Но дела все еще идут немного быстрее: React движется к Hooks API и React-Redux , пытаясь догнать .Но срезы и компоненты контейнера никуда не денутся, это естественный способ разделения проблем.