Модифицируйте селектор в саге-редукте без изменения состояния - PullRequest
0 голосов
/ 24 сентября 2018

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

Так что, если это не так (в избыточном выражении)сага):

const filters = yield select(state => state.filters.filters);

filters.terms['helloo'] = "mutated";

//send data with request
yield put(requestData(filters)

Почему первая строка является прямой ссылкой на государство?

В любом случае, если я пытаюсь использовать Object.assign, он также изменяет состояние:

const filters = Object.assign({}, yield select(state => state.filters.filters));
filters.terms['helloo'] = "mutated";

Как создать выделение, которое является копией состояния?

1 Ответ

0 голосов
/ 24 сентября 2018

Здесь действительно нет никакой "магии".getState() в Redux буквально просто return state, и оба рукописных селектора и Reselect возвращают все, что вы написали возвращаемые функции.Итак, в этом примере filters - это фактическая ссылка на объект, которая вложена в состояние хранилища, потому что это то, что ваша функция вернула.

На странице Redux docs на "Неизменяемые шаблоны обновления ", вам необходимо скопировать все уровни вложенности, которые вы хотите обновить.В вашем примере вы создаете копию filters, но не filters.terms, поэтому terms также остается исходным объектом, который находится в магазине.Вам также нужно будет сделать копию этого и изменить копию.

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