首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该在哪里更新状态?

我应该在哪里更新状态?
EN

Stack Overflow用户
提问于 2017-02-12 16:47:05
回答 1查看 2.7K关注 0票数 0

我有一个组件,在其中我更新了componentDidMount函数中的状态。我收到了一条链接警告,向我指出这一页:

https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md

上面写着

防止setState在componentDidMount中的使用(未完成安装-设置状态) 在组件挂载后更新状态将触发第二个render()调用,并可能导致属性/布局混乱。

我应该在哪里更新我的状态呢?

这是我的componentDidMount函数:

代码语言:javascript
运行
复制
  componentDidMount(){
    this.interval = setInterval(() => {
      this.setState({
        frame: this.state.frame + 1
      });
    }, this.props.interval);
  }

这是我的渲染功能:

代码语言:javascript
运行
复制
render(){
    let dots = this.state.frame % (this.props.dots + 1);
    let text = '';
    while(dots > 0){
      text += '.';
      dots--;
    }
    return <span {...this.props}>{text}&nbsp;</span>;
  }

我的构造者:

代码语言:javascript
运行
复制
   constructor(props, context){
    super(props, context);

    this.state = {frame: 1}; 
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-12 16:52:21

实际上,您不是在使用setState,而是定义将使用setState的异步操作,我认为这条规则是关于同步操作setState的,所以如果您确信第一次呈现将在触发间隔之前进行,则可以在eslint中禁用此规则。

查看这个线程和来自@ljharb https://github.com/airbnb/javascript/issues/684#issuecomment-264094930的评论

在setState中执行componentDidMount将导致可见的呈现闪存。 然而,当执行服务器呈现时,任何需要浏览器环境的东西都必须在componentDidMount中运行,因为它只运行客户机,但是componentWillMount同时运行在客户机和服务器上。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42190351

复制
相关文章

相似问题

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