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
}
}
const store = createStore(todos, ['Use Redux'])
store.dispatch({
type: 'ADD_TODO',
text: 'Read the docs'
})
console.log(store.getState())
// [ 'Use Redux', 'Read the docs' ]Советы
Не создавайте более одного хранилища в приложении! Вместо этого используйте
combineReducers, чтобы создать единственный корневой reducer из многих.Состояние Redux обычно представляет собой простые JS объекты и массивы.
Если ваше состояние — обычный объект, убедитесь, что вы никогда его не изменяете! Неизменяемые обновления требуют создания копий каждого уровня данных, обычно с помощью оператора разброса объектов (
return { ...state, ...newData }).Для универсальных приложений, работающих на сервере, создавайте экземпляр хранилища с каждым запросом, чтобы они были изолированы. Отправьте несколько действий по извлечению данных в экземпляр хранилища и дождитесь их завершения, прежде чем отображать приложение на сервере.
При создании хранилища Redux отправляет фиктивное действие в ваш reducer для заполнения хранилища начальным состоянием. Вам не следует обрабатывать фиктивное действие напрямую. Просто помните, что ваш reducer должен возвращать некое начальное состояние, если состояние, переданное ему в качестве первого аргумента, это
undefined, и всё готово.Для применения нескольких улучшителей хранилища, вы можете использовать
compose().
© 2015–2021 Dan Abramov
Licensed under the MIT License.
https://redux.js.org/api/createstore