Использование 13React-Redux

Источник: HTTP: //www.ruanyifeng.com/blog/2016/09/redux_tutorial_part_three_react-redux.html 
Import магазин => OnClick => событие отправки => = выполнить редуктор> store.subscribe
React-Redux компоненты: компоненты пользовательского интерфейса (ответственные за пользовательский интерфейс визуализация) и контейнерные компоненты (ответственная за управление данными и логикой).
Реагировать-Redux источник подключения:
вар подключить = createConnect () => 
функция createConnect () { 
    connectHOC = connectAdvanced 
    Функция возврата соединить (mapStateToProps, mapDispatchToProps, mergeProps) { 
        возвращение connectHOC () => возвращение connectAdvanced () => функция connectAdvanced (selectorFactory) { 
            возвращение функции wrapWithConnect (WrappedComponent ) { 
                возврата hoistNonReactStatics (Connect, WrappedComponent) => вар hoistNonReactStatics = createCommonjsModule (функция (модуль, экспорт) { 
                }) 
            }) 
        } 
   } 
}
А, компоненты пользовательского интерфейса 
1, компонент пользовательского интерфейса имеет следующие характеристики.
(1) отвечает только для рендеринга пользовательского интерфейса, без какой - либо бизнес - логики
(2) это не состояние (то есть, без использования переменной this.state)
(3) Все данные по параметрам (this.props) , предоставленные
(4) не использовать любой в API Перевождите
пример (6) ниже компоненты пользовательского интерфейса.
Const Заголовок = значение => <h1> {значение} </ h1>;
2, потому что они не содержат состояние, компоненты пользовательского интерфейса, также известное как «чистый компонент», то есть, он функционирует как чистое, чистое определить его значение по параметру. 

Во- вторых, узел емкости
1, узел контейнера имеет следующие особенности.
(1) отвечает за управление данными и бизнес - логикой, не несет ответственность за UI презентацию
(2) с внутренним состоянием
(3) с использованием API Redux

три, компонент пользовательского интерфейса, так и в сочетании с контейнером узлом
1, если компонент пользовательского интерфейса оба имеет бизнес - логику , то он разделяется на два слоя: контейнер сборки снаружи, внутри упаковки компонента пользовательского интерфейса. Бывший ответственный за связи с внешним миром, данные последнего, чтобы сделать вид последнего.
2, React-Перевожди указаны, все компоненты пользовательского интерфейса , предоставленных пользователем, устройство контейнера автоматически генерируются React-Redux.

Четыре, подключить ()
React при условии , Перевождите-соединения для генерации компоненты пользовательского интерфейса из контейнера сборки.
импорт {} соединиться с 'реагируют-Redux' 
сопзЬ myContainerComponent = соединить ( 
  mapStateToProps, 
  mapDispatchToProps 
) (myUIComponent)
Выше код, myUIComponent компонент пользовательского интерфейса, myContainerComponent генерируется автоматически с помощью метода React-Перевождь соединить с помощью устройства контейнера. Подключения метод принимает два параметра: mapStateToProps и mapDispatchToProps, который определяет компоненты пользовательского интерфейса бизнес - логики. Бывшее отвечают за входную логику, т.е. отображенной на внешнее состояние данных атрибутов компонента пользовательского интерфейса (реквизит), который отвечает за вывод логики, пользователь собирается управлять компонентом пользовательского интерфейса отображается в объекты действий, распространяется из компонентов пользовательского интерфейса. 

Пять, mapStateToProps ()
. 1, является функцией mapStateToProps. Его роль заключается в создании отображение объекта в состояние вне сборки реквизита объекта UI, возвращается после выполнения объекта {prop1: state.state1, prop2: state.state2 }.
2, подключение пусть mapStateToProps Подписка Store, то есть бывший в массив свойств последнего, слушатели найти состояние обновление, внедрение «издательских функций», а затем цикл по массиву и исполняй пересчитывать компоненты параметры пользовательского интерфейса, тем самым вызывая повторный рендеринг компонентов пользовательского интерфейса. Примечание: Подписаться как «связывание», подключите исполнение вызвало подписываться на выполнение.
3, первый параметр всегда mapStateToProps состояния объектов, второй параметр может быть использован ownProps, представитель реквизита возражал сборки контейнера. После использования контейнера в сборе , если этот параметр изменяется, приведет к повторной визуализации компонентов пользовательского интерфейса.
mapStateToProps = соп (State, ownProps) => { 
  возвращение { 
    Активный: ownProps.filter === state.showFilter 
  // Активный: state.active, этот случай не второй параметр ownProps 
  } 
} 
4, если опущенное mapStateToProps соединить параметры метода, то компоненты пользовательского интерфейса не подписаться на магазин, Хранить обновления не вызывают , что это обновленные компоненты пользовательского интерфейса. 

Шесть, mapDispatchToProps ()
. 1, mapDispatchToProps соединить функция второго параметр, параметры , используемые для построения компонентов пользовательского интерфейса способа отображения store.dispatch. Другими словами, он определяет , какие действия должны быть переданы в качестве действий Store. Т.е., пользователь приводит в действие компонент сопоставлен с действием. Это может быть функция, она может быть целью.
2, если функция mapDispatchToProps, отправка и будет ownProps (реквизита объекта сборки контейнера) два параметра. Код можно увидеть ниже, mapDispatchToProps как функция должна возвращать объект, «каждый» ключ карта объекта, определить , каким образом параметры компонентов пользовательского интерфейса послал действий.
mapDispatchToProps = Const (диспетчерская, ownProps) => { 
  возвращение { 
    событие // Компоненты запуска пользовательского интерфейса , такие как OnClick, выполнить функцию myClick, в чистом функции, то action.type в соответствии с назначением, обновления состояния (фильтр) стр. 
    MyClick: () => { 
      отправка ({ 
        тип: 'MyFilter', 
        фильтр: ownProps.filter // Получить объект из атрибута 
      }); 
    } 
  }; 
} 
3, если mapDispatchToProps является объектом, то соответствующий тому же имя, что и имя каждого компонента пользовательского интерфейса ключевых параметров должна быть функциональной клавишей, будет рассматриваться как Создатель Действие, действие будет выдается автоматически возвращается в Redux.
{MapDispatchToProps = Const 
  MyClick: (фильтр) => {// атрибут в качестве параметра 
    типа: '', MyFilter 
    фильтра: Фильтр 
  }; 
}
 

Семь, <Provider> компоненты
соединить метод после того, как контейнер для генерирования компонентов, компоненты контейнера должны получить государственные объекты для создания компонентов параметров пользовательского интерфейса. Одним из решений является указать объект в качестве параметра , передаваемого в контейнере узла. Но в глубоких компоненты контейнера могут быть уровнем, уровень состояния будет проходить на очень хлопотно. Реагировать-Redux обеспечивает Provider компонент , который позволяет Тарным получить состояние. В следующем коде, внешнего слоя Provider корневой пакет, все подкомпоненты App можно получить состояние.
импорта {} Провайдер из 'реагируют-Redux' 
импорта {createStore} из '' перевождь 
импорта MYAPP из './reducers 
импорта App из' ./components/App» 
пусть магазин = createStore (MYAPP); 
рендеринга ( 
  <провайдер магазин = {магазин}> 
    <приложение /> 
  </ Провайдер>, 
  document.getElementById ( 'RootElement') 
)
Его принцип является свойство контекста Реагировать сборка, хранение в вышеуказанном контексте контекста объекта. Источник следующим образом:
Класс поставщик расширяет компонент { 
  getChildContext () { 
    возвращение { 
      магазин: this.props.store 
    }; 
  } 
  Визуализации () { 
    вернуть this.props.children; 
  } 
} 
Provider.childContextTypes = { 
  магазин: React.PropTypes.object 
}
Код React-Redux контейнер сборки автоматически, так что он похож на следующее, а затем сохранить сборочный узел может получить из контекста, код выглядит следующим образом.
Класс myContainerComponent расширяет компонент { 
  componentDidMount () { 
    сопз {} = магазин this.context; 
    this.unsubscribe = store.subscribe (() => 
      this.forceUpdate () 
    ); 
  } 
  Визуализации () { 
    Const реквизита = this.props; 
    Const {магазин} = this.context; 
    Const состояние = store.getState (); 
    // ... 
  } 
} 
myContainerComponent.contextTypes = { 
  магазин: React.PropTypes.object 
}

  

VII Пример: счетчик 
1, следующий пример представляет собой счетчик компонент представляет собой компонент пользовательского интерфейса чистым. Этот компонент пользовательского интерфейса имеет два параметра: значение и onIncreaseClick. Прежние должны быть рассчитаны из состояния, второй необходимости выпускать наружу действие.
Класс Счетчик расширяет компонент { 
  визуализации () { 
    сопз {значение, onIncreaseClick} = this.props 
    возврата ( 
      <DIV> 
        <SPAN> {значение} </ SPAN> 
        <Кнопка OnClick = {onIncreaseClick}> Увеличить </ Кнопка> 
      </ DIV > 
    ) 
  } 
}
2, следующие определения состояния значение отображения, и направить onIncreaseClick отображения.
mapStateToProps функция (состояние) { 
  возвращение { 
    значение: state.count / * могут быть выполнены , когда результаты функции * / 
  } 
} 
функция mapDispatchToProps (отправка) { 
    возвратные { 
            инициирующее событие // компоненты пользовательского интерфейса , такие как OnClick, выполнять функцию onIncreaseClick, в в чистой функции, в соответствии с соответствующим состоянием action.type различного назначения, стр обновить 
            onIncreaseClick: () => отправка ( действие) / * аргумент может быть тип объекта {: «Увеличение»} * / 
   } 
}
3, генератор поведения (Создатель действий)
Const действие = {типа: 'увеличение'}
4, соединяют способ генерации сборки сосуда.
Const App = подключающиеся ( 
  mapStateToProps, 
  mapDispatchToProps 
) (счетчик)
5, редуктор (чистая функция), определенный в компоненте.
Функция счетчика (состояние = {число: 0}, действие) { 
  Const счетчик = state.count 
  переключатель (action.type) { 
    случай 'увеличение': 
      возвращение {количество: кол + 1} по 
    умолчанию: 
      возвращать состояние 
  } 
}
6, чтобы генерировать хранилище объектов, за пределами поставщика корневого слоя пакета.
импорт {Loadstate, saveState} от './localStorage'; 
Const persistedState = Loadstate (); 
Const магазин = createStore ( 
  MYAPP, 
  persistedState 
); 
store.subscribe (дроссель (() => { 
  saveState ({ 
    Todos: store.getState () Todos,. 
  }) 
}, 1000)) 

ReactDOM.render ( 
  <Провайдер магазин = {магазин}> 
    <приложение /> 
  </ Провайдер >, 
  document.getElementById ( 'RootElement') 
);
Девять, React-маршрутизатор библиотеки маршрутизации. Используйте React-маршрутизатор проекта, также завернутый в слое на внешней стороне с Provider Router, в конце концов, единственной функцией передачи объектов магазина провайдера.
Корень Const = ({магазин}) => ( 
  <Провайдер магазин = {магазин}> 
    <маршрутизатор> 
      <путь маршрута = "/" компонент = {приложение} /> 
    </ маршрутизатор> 
  </ Провайдер> 
);
Десять, разница между HTML и ВЗАИМОДЕЙСТВУЮТ событие события 
ВЗАИМОДЕЙСТВУЕТ событие с HTML событием, первое письмо после инцидента на ВЗАИМОДЕЙСТВУЮТ капитализируются! Например ВЗАИМОДЕЙСТВУЕТ нажмите событие является кнопка <OnClick = {myClick}> Нажмите </> кнопку, и событие щелчка мышью кнопку <OnClick = "myClick () HTML "> Нажмите кнопку </>.

Примечание: Подача - режим выпуска:
1, увеличивая к DOM - объект пользовательского события атрибуты: obj.selfEvent = [];
2, определить функцию подписки (связанную), множество пользовательской функции, функцию высвобождения
3, множество раз Подписаться на выполнение функции (BIND), тем больше пользовательских функций в (1) массиве
4, выполнение издательских функций, найти свойство пользовательских событий, пересекающий массив для выполнения пользовательских функций
в общем, в любом месте Исполнительная «подписка (связывание) функции», функция (пользовательская) в массив свойств объекта DOM, ожидая нужное время с «функцией выпуска» траверс исполнения.
Другой: поток только односторонняя мысль потока данных, это не конкретный кадр.

 

 

 

 

 

  

 

 

 




  

рекомендация

отwww.cnblogs.com/gushixianqiancheng/p/10964065.html