2015-12-07 2 views
3

Я немного работал с редукцией после поиска серии мини-лекций на egghead.io. Я пытаюсь понять разницу между redux и this.state и когда это целесообразно использовать.redux vs this.state in response native

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

Однако, когда дело дошло до поддержания другого состояния - скажите текущее состояние, в котором пользователь включен, мне было довольно сложно использовать сокращение, потому что мне пришлось по существу поддерживать собственную историю экранов независимо от Navigator , Это также становится затруднительным, когда есть вложенные навигаторы, и становится неясным, к какому состоянию «назад» следует взять пользователя.

Мне интересно, какие хорошие правила большого пальца или ситуации, где было бы целесообразно использовать this.state vs redux vs, а не вручную сохранять состояние вообще (например, с помощью Navigator).

+0

Я думаю [это SO сообщение] (https://stackoverflow.com/q/46639403/3694459) дает более подробную информацию о состоянии Redux против реакции государства. – Balasubramanian

ответ

9

Как правило, Redux сидит над вашими «умными компонентами», подавая им только биты глобального состояния приложения, которое они предназначены для обработки. Я бы сказал, что обычно в хранилище Redux всегда хранится состояние, если только используемое состояние буквально не является внутренним компонентом функции и никогда не будет использоваться в другом месте.

Примером этого может быть сохранение значения поля textInput, в котором значение не является частью, которая интересует другие компоненты, возможно, она скомпилирована вместе с другими значениями или вы хотите только сделать ее доступной для других компонентов один раз он удовлетворяет некоторым требованиям длины или чему-то еще. В таком случае я бы сохранил его в состоянии моего компонента, прежде чем, в конечном счете, скопировал его в магазине redux.

Государственное хранилище «Правила», что я лично следить:

  1. Как только значение какого-либо интереса к какой-либо другой части приложения, может иметь значение позже, или будет передан другие компоненты (умные или тупые), он ДОЛЖНЫ идти в Redux
  2. Если значение буквально нонсенс к остальной части вашего приложения, это МАЙ не управляться внутренне к компоненте через состояние этого компонента до тех пор, пока ему подлежит вышеуказанному.

Что касается вашего конкретного вопроса навигатора не зная, что «назад» в том, почему не вместо реализовать route состояние как массив вместо этого? Вы можете также написать функцию navigator с компонентами-обтекателями, чтобы просмотреть только последний элемент в routes.

mapStateToProp(state) { 
    return { currentRoute: state.route && state.route[state.route.length-1] } 
} 
+0

Спасибо за ваш ответ! В вашем опыте, связанном с сокращением, есть состояние «текущего экрана» или состояние навигационной истории, которое вы сохранили в сокращении? – fanghai44

+0

Вы можете определенно сохранить «currentScreen» вдоль всей трассы маршрута. Они не должны быть взаимоисключающими. Проверьте [этот пример] (https: // github.com/Qwikly/react-native-router-redux/blob/master/src/reducer.js) –

+0

Не лучший ли пример сохранения состояния для компонента при анимации? Один компонент может потенциально обновлять состояние 60 раз в секунду или более в зависимости от того, как он реализован. – Sawtaytoes

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