Извлекает ли getState () из избыточного thunk фактическое состояние - PullRequest
1 голос
/ 15 марта 2019

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

Примите во внимание следующее:

const filterInPlace = (array, predicate) => {
    let end = 0;

    for (let i = 0; i < array.length; i++) {
        const obj = array[i]

        if (predicate(obj)) {
            array[end++] = obj
        }
    }

    array.length = end
}
//some event handler
...
const forDeletion = new Set([...ids])
let currentState = getState().home.lists
filterInPlace(currentState, obj => !forDeletion.has(obj.rowid))
dispatch(handleSelectLists(ids)) //Leads to an action and reducer

Изменяет ли getState () хранилище?

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

getState() не меняет магазин, но возвращает ссылку на магазин. То есть когда вы говорите let currentState = getState().home.lists, currentState теперь указывает на ваш магазин. Если вы измените его, он изменит ваш магазин.

Очевидно, что это не то, что вы хотите, поэтому вам нужно сделать копию.

Предполагая, что lists является массивом, это поможет.

let currentState = [...getState().home.lists]

1 голос
/ 15 марта 2019

Чтобы ответить на ваш точный вопрос, getState() само по себе не меняет магазин.

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

через избыточные документы :

[getState()] Возвращает: Текущее дерево состояний вашего приложения.

Похоже, вы передаете свой массив состояний в filterInPlace, а затем добавляете элементыдо конца.

Если вы не хотите изменять дерево состояний, вот несколько шаблонов, которые вы можете проверить: https://redux.js.org/recipes/structuring-reducers/immutable-update-patterns

...