Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 ImmutableJS-更新列表中的值_Javascript_Reactjs_Immutable.js - Fatal编程技术网

Javascript ImmutableJS-更新列表中的值

Javascript ImmutableJS-更新列表中的值,javascript,reactjs,immutable.js,Javascript,Reactjs,Immutable.js,我有一个这样的映射(在ImmutableJS中): 我想更新“arrayOfValues”数组第二个条目中的值“inside”。我怎么做?这就是我现在看到的,上面写着“未捕获错误:无效密钥路径” 我也直接尝试了这个,但没有成功: theMap.setIn(['arrayOfValues',1,'one','inside'],'updated value'); 经过几个小时的寻找解决方案,我感谢任何帮助。谢谢。您的setIn示例的工作原理与您在本手册中应该看到的一样: 您可能认为的值会因设置而

我有一个这样的映射(在ImmutableJS中):

我想更新“arrayOfValues”数组第二个条目中的值“inside”。我怎么做?这就是我现在看到的,上面写着“未捕获错误:无效密钥路径”

我也直接尝试了这个,但没有成功:

theMap.setIn(['arrayOfValues',1,'one','inside'],'updated value');

经过几个小时的寻找解决方案,我感谢任何帮助。谢谢。

您的
setIn
示例的工作原理与您在本手册中应该看到的一样:

您可能认为
的值会因
设置而改变


由于这些结构是不可变的,因此必须在新变量中捕获修改后的值,如
var theMap2=theMap.setIn(['arrayOfValues',1,'one','inside','updated value')

您所做的是正确的(请参见此)

调用
orig.setIn()
时,它不会直接修改
orig
。这就是这个
不可变的
库的全部目的。它不会改变现有数据,而是从现有数据创建一个新数据

activePane是我必须修改的数组(列表)中对象的索引


你的例子对我来说没有错误。你不能更新不可变的结构。所以“它不会改变现有的数据,而是从现有的数据中创建一个新的数据”-这是否符合逻辑,即我们要将新对象作为状态返回?这有点模糊me@steveinatorx:没错。您应该将新对象(
updated
)作为状态返回
orig
仍指旧数据(即,
更新!==orig
theMap.update('arrayOfValues',(list)=>{
  return list.setIn([1,'one','inside'],'updated value'); 
})
theMap.setIn(['arrayOfValues',1,'one','inside'],'updated value');
const orig = Immutable.fromJS({
  arrayOfValues: [
    { one: { inside: 'first in array' } },
    { one: { inside: 'second in array' } },
  ]
});

const updated = orig.setIn(['arrayOfValues', 1, 'one', 'inside'], 'updated value');

console.log(updated.toJS());

// {
//   arrayOfValues: [
//     { one: { inside: 'first in array' } },
//     { one: { inside: 'second in array' } },
//   ]
// }
case CHANGE_SERVICE:
  var obj = {
    title: '1212121 Tab',
    service: '',
    tagName: '',
    preDefinedApi: '',
    methodType: '',
    url: '',
    urlParams: [{
      label: '',
      name: '',
      value: '',
    }],
    headers: [{
      label: '',
      name: '',
      value: '',
    }],
  };
  var activePane = state.get('activePane');
  var panes = state.setIn(['panes', activePane, 'service'], action.val);

  return state.setIn(['panes', activePane, 'service'], action.val);