使用ES6闭包重用setState

时间:2018-02-20 05:30:18

标签: javascript reactjs ecmascript-6 closures draftjs

我对React和ES6完全不熟悉,并且无法理解如何在此处应用闭包概念来更新我的状态。我正在开发一个使用Draftjs的反应应用程序。我需要创建一个(depth:[...text])的新映射,并将其存储在组件状态中以便稍后引用它。

以下是我的功能:

 saveDepthMap(){
    let blockMap = this.state.editorState.getCurrentContent().getBlockMap();
    var depthMap = new Map();

    blockMap.forEach(k => {
        let depth = k.getDepth();
        let text = k.getText();
        if(text.replace(/^\s+|\s+$/g, '') !== undefined){
            console.log(depth, text);
            if(!depthMap.has(depth)) depthMap.set(depth, [text]);
            else depthMap.set(depth, depthMap.get(depth).concat([text]));
        }
    });

    this.setState({
        depthMap
    }, () => {
        console.log(this.state.depthMap, this.state.editorState.getCurrentContent().getBlockMap());
    });
}

首先我保存当前editorstate的blockMap(它是一个draftjs地图,用于在编辑器中获取块级信息)。我成功到现在为止。

然后我声明一张新地图并尝试使用blockMap函数将k,v从depthMap存储到.forEach()

不幸的是,状态都没有得到更新,在运行forEach()之后,depthMap也没有存储任何数据。

我认为我在这里遇到了关闭概念或其他问题。

1 个答案:

答案 0 :(得分:-2)

React setState()方法接受一个javascript对象。你应该像这样使用它

this.setState({ depthMap: newDepthMap }) //considering the newly created is newDepthMap