насколько я понял Redux, речь идет о сохранении всего состояния пользовательского интерфейса в одном магазине (чтобы иметь возможность легко воспроизводить определенные состояния и не иметь побочных эффектов). Вы можете управлять состоянием посредством запуска действий, которые запускают редукторы.
В настоящее время я пишу небольшое блог-приложение, в котором вы можете просто создавать и редактировать сообщения. У меня есть диалог для создания сообщения, примерно render
метод компонента App
возвращает что-то вроде этого:
<div>
<AppBar ... />
<PostFormDialog
addPost={actions.addPost}
ref="postFormDialog" />
<PostList
posts={posts}
actions={actions} />
</div>
Мой вопрос: должно ли состояние диалога (открытого или закрытого) быть частью объекта состояния компонента App? И поэтому открытие и закрытие диалога запускается через действие вместо того, чтобы делать что-то вроде следующего:
onTriggerCreatePostDialog(e) {
this.refs.postFormDialog.show();
}
где onTriggerCreatePostDialog
запускается через какой-либо прослушиватель кликов на кнопке "Создать" или около того.
Мне кажется немного странным, что я делаю это через действия, потому что вводит вид "косвенности".
Однако, предполагая, что я хочу повторно использовать диалог для действия редактирования, я должен иметь возможность открыть диалог из элементов, которые глубже в структуре компонента, например, из компонента Post
, который является дочерним элементом PostList
. Я мог бы сделать функцию onTriggerCreatePostDialog
вниз по иерархии с помощью свойства props
, но это кажется мне громоздким...
Таким образом, int end также связан с сообщением между компонентами, которые не находятся в прямой зависимости между родителями и дочерними элементами. Есть ли другие варианты? Должен ли я каким-то образом использовать глобальную шину событий? В настоящее время я не уверен.