之前可能已经提出过这个问题,但在充分搜索之后我找不到答案。
我正在研究React应用程序,我需要将状态存储在本地变量中。
以下是我的代码,它接受组件状态并将其存储在blockMap中:
let blockMap = this.state.editorState.getCurrentContent().getBlockMap();
然后我宣布一张新地图:
let tempMap = new Map();
现在,我需要将值存储到tempMap中。所以我做了这样的事情:
blockMap.forEach((k,v) => tempMap.set(k,v));
然后我打印出tempMap来查看设置变量。不幸的是,我再次得到一张空地图。我只是不明白为什么会这样。有人可以向我解释一下ES6问题或其他问题吗?
以下是完整功能:
printMapOfEditorState(){
let blockMap = this.state.editorState.getCurrentContent().getBlockMap();
let map = this.state.map;
let tempMap = new Map();
blockMap.forEach((k,v) => tempMap.set(k,v));
console.log(tempMap);
}
再一次跟进,在同一个函数中,我使用setState更改地图状态,如下所示:
blockMap.forEach(k => {
if(k.getText().replace(/^\s+|\s+$/g, '') !== undefined) {
this.setState({
map: map.set(k.getText(), k.getDepth())
});
}
});
令人惊讶的是这很有效。我无法理解这种异常行为。谢谢你的帮助。
答案 0 :(得分:1)
forEach
回调的参数采用(value, key)
而非(key, value)
的形式,因此您的forEach
应该是
blockMap.forEach((v,k) => tempMap.set(k,v));
^^^ swapped
但实际上你并不需要forEach,因为Map
可以在构造函数中使用另一个地图:
let tempMap = new Map(blockMap);