Javascript Immutable.js setIn不工作
我有下面的列表,我正试图从中返回一个新的列表,但我不断得到下面显示的错误。有什么想法吗Javascript Immutable.js setIn不工作,javascript,redux,immutable.js,Javascript,Redux,Immutable.js,我有下面的列表,我正试图从中返回一个新的列表,但我不断得到下面显示的错误。有什么想法吗 export const questions = List([ {uuid: uuid(), order: 0, text: 'Which country do you live in?', choices: [ { choice: 'United States', added: true }, { choice: 'Canada', added: true }, { choice
export const questions = List([
{uuid: uuid(), order: 0, text: 'Which country do you live in?', choices: [
{ choice: 'United States', added: true },
{ choice: 'Canada', added: true },
{ choice: 'Australia', added: true }
]},
{uuid: uuid(), order: 1, text: 'Which country were you born in?', choices: [
{ choice: 'Mexico', added: true },
{ choice: 'California', added: true },
{ choice: 'Seoul', added: true }
]}
]);
questions.setIn([0, 'text'], 'changed')
导致此错误的原因:
immutable.js:870 Uncaught Error: invalid keyPath
at invariant (immutable.js:870)
at updateInDeepMap (immutable.js:1974)
at updateInDeepMap (immutable.js:1980)
at List.Map.updateIn (immutable.js:1278)
at List.Map.setIn (immutable.js:1256)
at eval (eval at ./src/reducers/questionsList.js (questionsList.js:17), <anonymous>:1:11)
immutable.js:870未捕获错误:密钥路径无效
at不变量(immutable.js:870)
在updateInDeepMap(immutable.js:1974)
在updateInDeepMap上(immutable.js:1980)
在List.Map.updateIn(immutable.js:1278)
在List.Map.setIn(immutable.js:1256)
评估时(评估时。/src/reducers/questionsList.js(questionsList.js:17),:1:11)
尝试更新immutable.js库在immutable 4.0.0-rc9中,这实际上应该满足您的需要。在3.x中,setIn
仅适用于高度不可变的列表,但根据最新的文档:
普通JavaScript对象或数组可能嵌套在Immutable.js集合中,setIn()也可以更新这些值,通过创建这些值的新副本并应用更改来不变地处理这些值
看 问题在于,
questions
是一个普通JS对象的不可变列表。仅适用于高度不可变的对象。您可能希望设置questions=Immutable.fromJS(…)
以获得一个高度不可变的对象
但是,如果有意将vanilla JS对象放在不可变对象中(我真的希望不是这样),那么您要做的是使用immutable来获取vanilla对象,然后使用常规的ol'赋值来更改值:
questions.get(0)['text'] = 'changed'
可能重复的