createStore(reducer, [preloadedState], [enhancer])
Создаёт Redux хранилище, которое содержит полное дерево состояния вашего приложения.
В вашем приложении должно быть только одно хранилище.
Аргументы
-
reducer(Функция): Функция-редуктор, которая возвращает следующее дерево состояния, исходя из текущего дерева состояния и действия, которое нужно обработать. -
[
preloadedState] (любой тип): Начальное состояние. Вы можете указать его для того, чтобы выполнить гидрацию состояния с сервера в универсальных приложениях или восстановить ранее сериализованную пользовательскую сессию. Если вы использовалиreducerсcombineReducers, это должно быть простой объект с той же структурой, что и ключи, переданные в него. В противном случае вы можете передать что угодно, что понимает вашreducer. -
[
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