reactjs - 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() 会改变存储吗?
解决方案
getState()
不会更改存储,但会返回对存储的引用。意思是当你说时let currentState = getState().home.lists
,currentState
现在指向你的商店。如果你修改它,它将改变你的商店。
显然这不是你想要的,所以你需要制作一个副本。
假设lists
是一个数组,这可以解决问题。
let currentState = [...getState().home.lists]
推荐阅读
- javascript - findOneAndUpdate:使用父和子文档 id 进行更新
- .net - 迁移到包引用格式后,配置文件转换在构建服务器上不起作用
- java - org.openqa.selenium.firefox.GeckoDriverService.access$000(GeckoDriverService.java:42)
- android - Android SeekBars 在旋转前被裁剪
- algorithm - 这个算法对于 2016 ICPC 世界总决赛任务 L 是否足够?
- docker - docker 何时在运行时将文件复制到卷中?
- php - 如何从 DOMElement PHP Symfony 获取 CSS 选择器
- matlab - 在matlab中用矩形法求解积分
- javascript - Javascript数组映射,使用多个字符不起作用
- powershell - Exchange Online - Get-UserPhoto - 如何捕获非终止错误?