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));
}
- 克隆矩阵(到 newBoard obj)
- 尝试为矩阵单元格设置一个值 - 不起作用
- 尝试输出包含单元格值的消息 - 不起作用
我试图阅读 ImmutableJS 文档,但找不到任何关于在矩阵中设置值的内容("List" 类型的 ImmutableJS)。
您可以使用 .setIn([i, j], 'Hi')
但是 它不会改变值。这就是 ImmutableJS 的意义所在。它将 return 对您的原始数据结构稍作更改的版本。如果你只是在一行上写 setIn
并且不在任何地方分配结果那么什么都不会发生。什么都不会改变。就是这个意思。
getIn
和 setIn
非常有用。如果某些内容不存在,他们还可以提供默认值。我也不认为你在那里需要 .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.
我有这个矩阵:
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));
}
- 克隆矩阵(到 newBoard obj)
- 尝试为矩阵单元格设置一个值 - 不起作用
- 尝试输出包含单元格值的消息 - 不起作用
我试图阅读 ImmutableJS 文档,但找不到任何关于在矩阵中设置值的内容("List" 类型的 ImmutableJS)。
您可以使用 .setIn([i, j], 'Hi')
但是 它不会改变值。这就是 ImmutableJS 的意义所在。它将 return 对您的原始数据结构稍作更改的版本。如果你只是在一行上写 setIn
并且不在任何地方分配结果那么什么都不会发生。什么都不会改变。就是这个意思。
getIn
和 setIn
非常有用。如果某些内容不存在,他们还可以提供默认值。我也不认为你在那里需要 .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.