Я думаю, что вы путаете initial
состояние редуктора с глобальным состоянием вашего приложения.
Глобальное состояние означает просто объединенное состояние всех редукторов в вашем приложении.
Для простоты давайте предположим, что в вашем приложении есть только один редуктор.
Редуктор:
function todos(state = [], action) {
switch (action.type) {
case 'ADD_TODO':
return state.concat([action.text])
default:
return state
}
}
Так что эта простая функция todos
- это наш редуктор, который даст нам текущее дерево состояний, когда бы оно ни выполнялось.
Так что это наш первый параметр для createStore
.
Начальное состояние:
['Understanding Store']
Давайте предположим, что наше начальное укажите как массив, который содержит 1 элемент, как показано выше.
Это будет наш второй параметр для createStore
.
Теперь мы создадим наш магазин следующим образом:
import { createStore } from 'redux'
//... code
.
.
.
const store = createStore(todos, ['Understanding Store'])
Теперь наш магазин создан. Ничего особенного, store - это, по сути, объект, в котором есть несколько методов.
Одним из таких методов является dispatch
. Этот метод помогает в dispatching
действии, которое будет выполняться через наш редуктор и затем обновлять состояние.
Поэтому, когда мы делаем это
store.dispatch({
type: 'ADD_TODO',
text: 'Learn methods on Store'
})
, это обновит наше состояние, как показано ниже:
['Understanding Store','Learn methods on Store']
Но когда ваше приложение становится большим, вы можете захотеть создать разные функции (редукторы) для управления различными частями вашего глобального состояния.
Если у нас есть еще один редуктор, скажем counter.js
:
export default function counter(state = 0, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1
case 'DECREMENT':
return state - 1
default:
return state
}
}
Затем, чтобы объединить наши 1-ые задачи редуктора и этот счетчик-редуктор, у нас есть утилита под названием combineReducer
.
rootReducer. js
import { combineReducers } from 'redux'
import todos from './todos'
import counter from './counter'
export default combineReducers({
todos,
counter
})
Затем, используя createStore
, вы просто делаете это:
import { createStore } from 'redux'
import rootReducer from './rootReducer.js;
const store = createStore(rootReducer);
Существуют определенные правила, которым необходимо следовать при использовании combineReducers
.
Ознакомьтесь с правилами здесь