Как createStore извлекает initialState из функции редуктора в redux? - PullRequest
0 голосов
/ 20 декабря 2018

Я просматривал код избыточности, createStore.js, я не могу понять, как он извлекает исходное состояние из функции редуктора.Если начальное состояние указано в функции редуктора в качестве 1-го аргумента.

https://github.com/reduxjs/redux/blob/master/src/createStore.js#L31

, код инициирует currentState из preloadedState, но я не могу найти, как он извлекаетэто из функции редуктора.

Например, функция редуктора:

const counter = ( state = 2, action) => {
  switch(action.type){
    case 'INCREMENT':
        return state + 1;
    case 'DECREMENT':
      return state - 1;
    default:
      return state;   
  }
  
}

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Метод подключения Redux запускает имя события INIT с неопределенным состоянием, поэтому, если вы заменили неопределенное своим собственным состоянием, оно заменит его.поэтому default: case есть, чтобы он мог вернуть ваше начальное состояние.подробнее о методе connect () REDUX.

0 голосов
/ 20 декабря 2018

В вашем примере функция редуктора

const counter = (state = 2, action) => ...

Вы фактически не переходите в состояние по умолчанию как таковое, но устанавливаете значение по умолчанию для этого состояния.

Функция может быть переписана вэто:

const counter = (state, action) => {
  if (state == null) state = 2; // not good practice, just for illustration purpose
  ...
}

Поэтому, когда редуктор передается в 'createStore', createStore просто запускает редуктор;Аргумент состояния не определен, поэтому он установлен на 2.

Документы Redux могут прояснить ситуацию немного подробнее:

Редукторы также могут указывать начальное значение, просматривая входящий аргумент состояния, который не определен, и возвращая значение, которое они 'Я хотел бы использовать по умолчанию.Это можно сделать с помощью явной проверки внутри редуктора или с помощью синтаксиса значения аргумента по умолчанию в ES6: функция myReducer (state = someDefaultValue, action).

redux docs

0 голосов
/ 20 декабря 2018

Исходное состояние не извлекается из редуктора.Из-за того, как работает редуктор, состояние всегда преобразуется редуктором.Это также делается при создании магазина, потому что INIT отправлено внутреннее действие .Если состояние undefined, оно инициализируется значением по умолчанию, указанным в параметре редуктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...