首页 > 解决方案 > redux thunk 中的 getState() 是否会更改实际状态

问题描述

我正在使用 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() 会改变存储吗?

标签: reactjsreduxreact-reduxredux-thunk

解决方案


getState()不会更改存储,但会返回对存储的引用。意思是当你说时let currentState = getState().home.listscurrentState现在指向你的商店。如果你修改它,它将改变你的商店。

显然这不是你想要的,所以你需要制作一个副本。

假设lists是一个数组,这可以解决问题。

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


推荐阅读