Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Immutable.js setIn不工作_Javascript_Redux_Immutable.js - Fatal编程技术网

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'
可能重复的