我有一个组件,在其中我更新了componentDidMount函数中的状态。我收到了一条链接警告,向我指出这一页:
https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-did-mount-set-state.md
上面写着
防止setState在componentDidMount中的使用(未完成安装-设置状态) 在组件挂载后更新状态将触发第二个render()调用,并可能导致属性/布局混乱。
我应该在哪里更新我的状态呢?
这是我的componentDidMount函数:
componentDidMount(){
this.interval = setInterval(() => {
this.setState({
frame: this.state.frame + 1
});
}, this.props.interval);
}这是我的渲染功能:
render(){
let dots = this.state.frame % (this.props.dots + 1);
let text = '';
while(dots > 0){
text += '.';
dots--;
}
return <span {...this.props}>{text} </span>;
}我的构造者:
constructor(props, context){
super(props, context);
this.state = {frame: 1};
}发布于 2017-02-12 16:52:21
实际上,您不是在使用setState,而是定义将使用setState的异步操作,我认为这条规则是关于同步操作setState的,所以如果您确信第一次呈现将在触发间隔之前进行,则可以在eslint中禁用此规则。
查看这个线程和来自@ljharb https://github.com/airbnb/javascript/issues/684#issuecomment-264094930的评论
在setState中执行componentDidMount将导致可见的呈现闪存。 然而,当执行服务器呈现时,任何需要浏览器环境的东西都必须在componentDidMount中运行,因为它只运行客户机,但是componentWillMount同时运行在客户机和服务器上。
https://stackoverflow.com/questions/42190351
复制相似问题