gpt4 book ai didi

javascript - ImmutableJS - 只更新对象中的一个键值

转载 作者:行者123 更新时间:2023-11-30 15:08:21 24 4
gpt4 key购买 nike

我的 reducer 中最初有以下不可变状态:

const firstState = Map({ "1": {title: "Hello 1", content: "Content 1"}, "2" : {title: "Hello 2", content: "Content 2"} });

现在,在我的 reducer 中,当 EDIT_POST 操作进入时,我想更改其中一些字段,如果它们被用户更改的话。所以说用户只编辑了标题字段(第 1 篇文章)。然后我想要一个标题字段已更改但内容字段保持不变的新状态。

但是,我不知道该怎么做。

我已经尝试了一些东西,例如这两件事(在不同的时间):

case 'EDIT_POST': {
var obj = state.get(action.id);

//let newState = state.setIn(['1','title'], 'New Title');
//let newState = state.set("1", {title: "New Title"});
return newState;
}

第一件事根本不起作用,第二件事消除了所有其他值。

最佳答案

setIn 不起作用,因为您混合了纯 Javascript 对象和 immutable.js 对象。 immutable.js 假定整个对象由 immutable.js 对象组成。

你的 map :

const firstState = Map({ "1": {title: "Hello 1", content: "Content 1"}, "2" : {title: "Hello 2", content: "Content 2"} });

应该看起来更像这样:

const firstState = Map({
"1": Map({ title: "Hello 1", content: "Content 1" }),
"2": Map({ title: "Hello 2", content: "Content 2" })
});

嵌套对象必须是 Map 或其他不可变类型的实例,然后 setIn 才能工作。

如果您有一个普通的 JS 对象并想将其转换为不可变对象(immutable对象),您可以使用 Immutable.fromJS(someObject)

关于javascript - ImmutableJS - 只更新对象中的一个键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45434669/

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