Что на самом деле является неизменным в данных редукции или состояния или в обоих? - PullRequest
0 голосов
/ 10 ноября 2018

Я всегда читаю, что состояние в приставке есть и должно быть неизменным, в то время как регистрация store.getState () вернет состояние, которое может представлять измененные данные после отправки определенного действия.

Эта часть вводит меня в заблуждение, как мы можем считать, что состояние является неизменным в этом случае, относится ли здесь состояние к исходным данным или исходным данным, которые были переданы в качестве первого аргумента редуктору ??

const reducer = (state = [], action) => {


}

Является ли неизменяемое состояние здесь начальным состоянием, которое является пустым массивом или данными, отправленными после выборки ???

Мне нужно кое-что прояснить об этой запутанной части ???

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Само состояние избыточности не является неизменным , но оно состоит из неизменных структур данных. Сказать, что это состояние является неизменным, неправильно.

Смысл неизменности структуры данных в том, что вы никогда не изменяете ее. Говоря о массивах, мутирование означает добавление, удаление или установку значений (например, push, shift, splice и т. Д.). Поэтому, чтобы изменить значение, вы всегда должны создавать новый массив (вместо изменения существующего массива).

Например:

const reducer = (state = [], action) => {
    const addedValue = action.payload.addedValue;
    return [...state, addedValue];
}

не

const reducer = (state = [], action) => {
    const addedValue = action.payload.addedValue;
    state.push(addedValue);
    return state;
}

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

Чтобы объяснить концепцию бегания во времени, упомянутую в комментариях, сначала предположим, что в некоторой переменной есть некоторое избыточное состояние:

let state = /* redux state */

При каждом запуске действия все редукторы запускаются рекурсивно для создания нового состояния. Вся концепция в Redux выражается примерно так:

let oldState = state;
state = reducers(oldState, action);

Концепция временного хода означает, что мы делаем что-то вроде этого:

const stateHistory = [];
stateHistory.push(state)
state = reducers(oldState, action);

Таким образом, наша переменная stateHistory содержит полное предыдущее состояние. Чтобы пройти время, мы можем просто:

state = stateHistory[index];

и перерисовать.

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

0 голосов
/ 10 ноября 2018

Я всегда читал, что состояние в редуксе есть и должно быть неизменным, а logging store.getState () вернет состояние, которое может представлять измененные данные после отправки определенного действия.

Это правда.

Эта часть меня смущает, как мы можем считать государство неизменным в этом случае, состояние здесь относится к исходным данным или начальным данные, переданные в качестве первого аргумента редуктору ??

Состояние в качестве аргумента редуктора относится к фактическому состоянию. Если вызов редуктора выполняется впервые, состояние будет инициализировано значением по умолчанию, в данном случае [] . Эта функция называется Параметры по умолчанию .

Является ли неизменяемое состояние здесь начальным состоянием, которое является пустым массивом или данные, отправленные после извлечения ???

Redux требует писать редукторы как чистые функции, чтобы изменения состояния обрабатывались исключительно Redux.

Для получения дополнительной информации см. Документация по редуктору .

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