ImmutableJS - 更新矩阵的单元格

ImmutableJS - Updating a cell of a matrix

我有这个矩阵:

const initialState = Immutable.fromJS({ 
  board: [
          ['','',''],
          ['','',''],
          ['','','']
         ]
});

还有这个函数:

function cellClick(state,i,j) { 

const board = state.get('board');
var newBoard = board.map(function(arr) {
    return arr.slice();
  });  
newBoard.set(i,j,'Hi');
alert(newBoard.get(i).get(j));
}
  1. 克隆矩阵(到 newBoard obj)
  2. 尝试为矩阵单元格设置一个值 - 不起作用
  3. 尝试输出包含单元格值的消息 - 不起作用

我试图阅读 ImmutableJS 文档,但找不到任何关于在矩阵中设置值的内容("List" 类型的 ImmutableJS)。

您可以使用 .setIn([i, j], 'Hi') 但是 它不会改变值。这就是 ImmutableJS 的意义所在。它将 return 对您的原始数据结构稍作更改的版本。如果你只是在一行上写 setIn 并且不在任何地方分配结果那么什么都不会发生。什么都不会改变。就是这个意思。

getInsetIn 非常有用。如果某些内容不存在,他们还可以提供默认值。我也不认为你在那里需要 .slice()。您根本不需要克隆任何东西。

它是一个不可变的数据结构,没有人可以改变它,这就是美妙的部分。

const initialState = Immutable.fromJS({ 
  board: [
          ['','',''],
          ['','',''],
          ['','','']
         ]
});

const nextState = initialState.setIn(['board', 0, 0], 'Hi')

// Now nextState has 'Hi' in it's first column and row.
// initialState is still the same as it was, it is not changed.