В моем приложении React/Redux я часто сталкиваюсь с проблемой реализации компонентов с состоянием, которое должно использоваться во всем приложении. В качестве примера возьмем простой всплывающий компонент с открытым/закрытым состоянием, который можно повторно использовать на любой странице. Вот два возможных подхода, которые я нашел:
Используйте
setState
и «локальный» редуктор (я использую recompose.withReducer который является просто синтаксическим сахаром для собственногоsetState
) React для управления его состоянием. Он выглядит простым и пригодным для повторного использования, пока вам не понадобится изменить состояние компонента в другой части вашей страницы (в противном случае закройте всплывающее окно). И вы не можете просто вызвать какое-то избыточное действие, чтобы изменить состояние.Сохраняйте состояние компонента в магазине Redux. При таком подходе мы можем вызвать
closePopupAction({ id })
в любом месте дерева компонентов, чтобы изменить его состояние. Но нам нужно как-то поместить его редьюсер (который я хочу сохранить в папке всплывающего окна) в корневой редюсер, когда компонент смонтирован, и удалить его. когда компонент размонтирован. Кроме того, у нас может быть несколько всплывающих окон на странице, и у каждого из них будет свое состояние.
Кто-нибудь сталкивался с подобной проблемой?
recompose
, если вы хотите вызватьsetState
в других поддеревьях, вы можете поднятьwithState()
на более высокий узел. В случаеredux
нет необходимости удалять редукторы, если только состояние не очень большое. - person wuct   schedule 19.10.2016