2016-07-22 2 views
2

Я создаю приложение React/Redux среднего размера, и мне стало очень удобно с React - однако Redux все еще немного сложно обернуть вокруг меня.Что хранить в состоянии redux?

Я понимаю, что я могу использовать connect() из Redux для подключения любого компонента или контейнера к состоянию Redux. Тем не менее, я не знаю, когда это сделать - это основано на сложности? Сколько реквизитов необходимо будет передать дочерним компонентам?

Каковы факторы, которые я могу использовать, чтобы определить, когда следует использовать connect()?

Редактировать, чтобы дать пример: -----

Например, я хотел бы, чтобы включить область сообщений для пользователей внутри моего приложения, в частности, значок, показывающий количество непрочитанных сообщений. Был бы я просто connect() любым компонентом, где я хотел бы показывать значок?

+0

Вы сохраняете состояние своего приложения в редуксе. т.е. замените использование this.setState своим состоянием редукции. – jzm

+0

Мне в основном это нравится - но цель просто никогда не использовать 'setState()' в приложении redux? В любой ситуации? – Toby

+0

Для большинства вещей, да. Вам не нужно полностью его устранять, но любая поддержка, которая должна быть передана другому компоненту, будет храниться в сокращении вместо этого и вытащить из состояния redux вместо – jzm

ответ

4

Вы сохраняете состояние своего приложения в сокращении. Как вы структурируете свое государственное дерево, зависит от вас. Вы можете думать о дереве состояний как о гигантском объекте javascript. С сокращением вы идеально сохраняете как небольшое состояние компонента в своих реактивных компонентах, а вместо этого переместите это в дерево состояний редукции.

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

{ 
    myDropdown: { 
    isOpen: false, 
    options: [ 
     'apple', 
     'orange' 
    ] 
    } 
} 

я считаю, хороший момент, чтобы начать вводить перевождь, когда ваше приложение получает до определенного момента, когда ваши компоненты не являются уже не просто «немой» компонентой, Данные дисплея.

Редактировать: Чтобы ответить на вопрос "когда следует подключать компоненты?". Я боролся с этим сам, но у меня пока нет отличного ответа. Прямо сейчас я обычно подключаю компонент, если я передаю реквизит через многие компоненты предка только для этого компонента. Таким образом, соединение полностью исключает этот шаблонный код.

+0

Это полезно - хотя мне кажется, что мне трудно обернуть голову идеей гигантского объекта, полного крошечных деталей, подобных этому. Многие статьи по этому вопросу говорят, что трудно понять, когда использовать состояние редукса или локальное состояние, я надеялся, что есть более четкий ответ - большое спасибо. – Toby

+0

По большей части, если у вас есть приложение response-redux, я бы полностью избегал локального состояния, если вы не можете решить проблему, связанную с конкретным компонентом. Например, я бы использовал локальное состояние, если мой компонент что-то делает на setInterval и поэтому сохраняет свой собственный таймер. – Jackson

+0

Это имеет смысл, спасибо. – Toby

6

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

Наличие специфического состояния в магазине, которое имеет значение только для этого компонента, является излишним и бесполезным ИМО.

+0

Я вернулся. Включение состояния пользовательского интерфейса в Redux только усложнит вам управление состоянием. Ваше приложение также быстро станет медленным, так как плохие реализации Redux вызывают массу ненужных переделок и компонентов, которые ожидают изменения состояния Redux, которые они не должны слушать. –

Смежные вопросы