首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用ES6闭包的React setState

使用ES6闭包的React setState
EN

Stack Overflow用户
提问于 2018-02-20 13:30:18
回答 1查看 825关注 0票数 0

我对React和ES6完全陌生,不知道如何在这里应用闭包的概念来更新我的状态。我正在开发一个使用Draftjs的react应用程序。我需要创建一个新的(depth:[...text])映射,并将其存储在组件状态中,以便稍后引用。

下面是我执行此操作的函数:

代码语言:javascript
运行
复制
 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());
    });
}

首先,我保存当前编辑器状态的blockMap(这是一个在编辑器中获取块级信息的draftjs映射)。在这一点上,我是成功的。

然后我声明一个新的映射,并尝试使用.forEach()函数将k,v从blockMap存储到depthMap中。

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

我认为我在闭包或其他方面的概念上错了。

EN

回答 1

Stack Overflow用户

发布于 2018-02-20 13:41:43

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

代码语言:javascript
运行
复制
this.setState({ depthMap: newDepthMap }) //considering the newly created is newDepthMap  
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48878467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档