Инструменты, которыми я пользуюсь: Reactjs 0.14.7, реактивный маршрутизатор 2.0.0 (шаблон потока)Reactjs - Как сделать компоненты осведомленными о текущем состоянии представления?
Примечание: Я отметил Redux, просто потому, что у меня есть подозрение (я его не использовал), что то, что я Возможно, это может быть одной из причин, по которым люди бредит этим.
Я понимаю, что реагировать-маршрутизатор уже управляет, какие части дерева компонентов в настоящее время в поле зрения и представляет компоненты, основанные на состоянии текущего вида дерева.
Вопрос:
Но что, если на основе компонентов с учетом, один компонент должен знать, что другие компоненты также в поле зрения и ведут себя по-разному в зависимости от того, что других компонентов с точкой зрения (мнение государство)? Какую стратегию вы бы предложили, чтобы компоненты знали о других компонентах?
мое текущее решение:
В настоящее время я пытаюсь использовать URL, чтобы вывести это глобальное состояние, и даже разбор его и положить его в магазин для того, чтобы компоненты, чтобы быть в курсе состояния представления прослушивая изменения из этого магазина.
Моя проблема с этим решением:
В двух словах хозяйствования, которые рассматривают состояние с магазином становится очень запутанным процессом с дополнительными действиями кропили по всему коду.
1) Действия должны быть вызваны для любого пользовательского события, которое изменит маршрут.
2) Действие необходимо уволят при плавании за пределами компонентов (я думаю, что его намного чище, чтобы сохранить действие стрельбы в компонентах (не стесняйтесь обсуждать, что один).
3) Вы должны также рассмотреть кнопку назад (в настоящее время используется реакция-маршрутизатор onEnterHooks, чтобы поймать, когда это произойдет).
Однако мне очень нравится концепция инкапсуляции состояния представления, потому что я могу представить, что она создает приятную ментальную модель, а также более умные компоненты, , а просто анализирует текущий URL-адрес и использует файл утилиты для определения текущего состояния представления, когда необходимо, как намного более простое/чистое решение для управления, а затем хранилищем, которое содержит текущее состояние представления.
- «компонентам никогда не нужно знать, какие компоненты визуализируются» - но что, если компонент должен вести себя по-разному в зависимости от того, какой компонент SIBLING в настоящее время находится в поле зрения? В моем случае, в частности, мне нужно запускать разные действия из одного и того же компонента, в зависимости от того, какой компонент соседа находится в поле зрения. Единственное решение, которое я вижу, если захватить viewstate в магазине или использовать URL, чтобы определить viewstate. Я в основном вижу что-то не так? –
Вы в корне видите что-то не так. В вашем родительском компоненте должно быть указано, что он использует, чтобы определить, какие дети будут отображать, которые вы можете передать этим детям, чтобы они знали, какие действия необходимо выполнить. Помимо реквизита и функции рендеринга, компоненты не имеют возможности общаться друг с другом. –