如何在componentDidMount()中使用setState或如何更改状态值? 使用以下代码时出现错误
无法在未安装的组件上调用setState(或forceUpdate)
componentDidMount(){
this.interval = setInterval(() => {
if(this.state.rmSec==0){
this.setState({
rmSec:59,
rmMin:this.state.rmMin-this.state.minus,
})
}else{
this.setState({
rmSec:this.state.rmSec-this.state.minus
})
}
if(this.state.rmMin==0){
this.setState({
rmSec:0,
rmMin:0,
})
}
}, 1000);
}
答案 0 :(得分:0)
在调用setState()之前检查isMounted
确实消除了警告,但也违反了警告的目的,因为现在您将永远不会收到警告(即使您应该这样做!)。 isMounted()
避免在组件卸载后调用setState(),因为在组件卸载后调用setState()会发出警告。更多内容:https://reactjs.org/blog/2015/12/16/ismounted-antipattern.html。因此,尝试
constructor(props) {
this.state = {isMounted: false}
}
componentDidMount() {
this.setState( { isMounted: true }, () => {
});
}
componentWillUnmount() {
this.setState( { isMounted: false } )
}
警告:在纯Javascript类中不推荐使用isMounted(...)。相反,请确保清理componentWillUnmount中的订阅和未决请求以防止内存泄漏。看起来像RN问题,我猜它将很快得到解决
答案 1 :(得分:0)
问题通过清除卸载时间间隔来解决
componentWillUnmount () {
this.interval && clearInterval(this.interval);
this.interval = false;
}