Стоит ли вам использовать this.setState () при использовании redux?


111

Стоит ли использовать this.setState()при использовании redux? Или вы всегда должны распределять действия и полагаться на реквизит?


1
Нет ничего плохого в том, что некоторые компоненты имеют состояние.
zerkms

3
Это полностью зависит от того, где используется состояние. Думайте о магазинах redux как о глобальных. Все, что не должно быть глобальным, может оставаться приватным для компонента и его дочерних элементов.
azium

Ответы:


139

Ясное использование setStateбудет для компонентов пользовательского интерфейса, которые имеют локальное состояние отображения, но не актуальны для глобального приложения. Например, логическое значение, которое указывает, активно ли отображается конкретное раскрывающееся меню, не обязательно должно находиться в глобальном состоянии, поэтому им удобнее управлять состоянием компонента меню.

Другие примеры могут включать в себя состояние свертывания / развертывания строк при отображении иерархии гармошкой. Или, возможно, текущая выбранная вкладка в навигации по вкладкам. Однако в обоих этих примерах вы все равно можете выбрать глобальную обработку состояния пользовательского интерфейса. Например, это было бы необходимо, если вы хотите сохранить состояние развертывания / свертывания в хранилище браузера, чтобы оно сохранялось при обновлении страницы.

На практике обычно проще всего реализовать такие элементы пользовательского интерфейса с локальным состоянием и при необходимости реорганизовать их в глобальное состояние.


23
В ответ на это в соответствующей статье Redux FAQ подчеркивается, что использование setStateсовершенно нормально : redux.js.org/docs/faq/…
markerikson

2
Если вы собираетесь передать или использовать рендеринг на стороне сервера, я думаю, вам всегда следует использовать Redux
neaumusic

Ссылка на часто задаваемые вопросы Redux обновлена ​​до redux.js.org/faq/organizing-state
AnandShanbhag
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.