gpt4 book ai didi

redux - 在不改变状态的情况下修改 redux saga 中的选择器

转载 作者:行者123 更新时间:2023-12-04 15:54:20 25 4
gpt4 key购买 nike

当使用选择器时,我认为我可以在不修改状态的情况下对变量做任何我想做的事情,所以我很惊讶状态会发生变化。

所以如果这是错误的(在 redux saga 中):

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";

如何创建作为状态副本的选择?

最佳答案

这里确实没有涉及“魔法”。 Redux 的 getState() 实际上只是 return state,手写选择器和 Reselect 都会返回编写的要返回的函数。因此,在该示例中,filters 是嵌套在存储状态中的实际对象引用,因为这是您的函数返回的内容。

根据 Redux docs page on "Immutable Update Patterns" ,您需要复制要更新的所有 嵌套级别。在您的示例中,您正在复制 filters,但不是 filters.terms,因此 terms 仍然是原始对象商店。您还需要制作一份副本,然后修改副本。

关于redux - 在不改变状态的情况下修改 redux saga 中的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52479041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com