Spec-Zone.ru › Redux 3

createStore(reducer, [preloadedState], [enhancer])

Создаёт Redux хранилище, которое содержит полное дерево состояния вашего приложения.
В вашем приложении должно быть только одно хранилище.

Аргументы

  1. reducer (Функция): Функция-редуктор, которая возвращает следующее дерево состояния, исходя из текущего дерева состояния и действия, которое нужно обработать.

  2. [preloadedState] (любой тип): Начальное состояние. Вы можете указать его для того, чтобы выполнить гидрацию состояния с сервера в универсальных приложениях или восстановить ранее сериализованную пользовательскую сессию. Если вы использовали reducer с combineReducers, это должно быть простой объект с той же структурой, что и ключи, переданные в него. В противном случае вы можете передать что угодно, что понимает ваш reducer.

  3. [enhancer] (Функция): Улучшитель хранилища. Вы можете указать его для того, чтобы улучшить хранилище с помощью сторонних возможностей, таких как middleware, путешествия во времени, сохранение и т. д. Единственным улучшителем хранилища, поставляемым с Redux, является applyMiddleware().

Возвращаемое значение

(Store): Объект, который содержит всё состояние вашего приложения. Единственный способ изменить его состояние — это отправка действий. Вы также можете подписаться на изменения в его состоянии для обновления интерфейса.

Пример

import { createStore } from 'redux'

function todos(state = [], action) {
  switch (action.type) {
    case 'ADD_TODO':
      return state.concat([action.text])
    default:
      return state
  }
}

let store = createStore(todos, ['Use Redux'])

store.dispatch({
  type: 'ADD_TODO',
  text: 'Read the docs'
})

console.log(store.getState())
// [ 'Use Redux', 'Read the docs' ]

Рекомендации

  • Не создавайте более одного хранилища в приложении! Вместо этого используйте combineReducers для создания единственного корневого редуктора из многих.

  • Вы сами выбираете формат состояния. Вы можете использовать простые объекты или что-то вроде Immutable. Если вы не уверены, начните с простых объектов.

  • Если ваше состояние является простым объектом, убедитесь, что вы никогда не изменяете его! Например, вместо того, чтобы возвращать что-то вроде Object.assign(state, newData) из ваших редукторов, верните Object.assign({}, state, newData). Таким образом, вы не перезаписываете предыдущее state. Вы также можете написать return { ...state, ...newData } если вы включите предложение оператора расширения объектов.

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

  • Когда хранилище создаётся, Redux отправляет фиктивное действие вашему редуктору для заполнения хранилища начальным состоянием. Вам не нужно обрабатывать фиктивное действие напрямую. Просто запомните, что ваш редуктор должен возвращать какой-либо начальный объект состояния, если состояние, переданное ему в качестве первого аргумента, undefined, и вы всё сделали правильно.

  • Для применения нескольких улучшителей хранилища вы можете использовать compose().

© 2015–2017 Dan Abramov
Licensed under the MIT License.
http://redux.js.org/docs/api/createStore.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API