无法在设置状态的未安装组件上调用 setState(或 forceUpdate)
Can't call setState (or forceUpdate) on an unmounted component on set state
我们如何在 componentDidMount() 中使用 setState 或我们如何更改状态值?。
使用以下代码时出现错误
Can't call setState (or forceUpdate) on an unmounted component
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);
}
在调用 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 } )
}
警告: isMounted(...) 已弃用 Javascript 类。相反,请确保清理 componentWillUnmount 中的订阅和未决请求,以防止内存 leaks.Looks 像 RN 问题,我猜它很快就会得到修复
问题已通过清除卸载间隔得到解决
componentWillUnmount () {
this.interval && clearInterval(this.interval);
this.interval = false;
}
我们如何在 componentDidMount() 中使用 setState 或我们如何更改状态值?。 使用以下代码时出现错误
Can't call setState (or forceUpdate) on an unmounted component
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);
}
在调用 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 } )
}
警告: isMounted(...) 已弃用 Javascript 类。相反,请确保清理 componentWillUnmount 中的订阅和未决请求,以防止内存 leaks.Looks 像 RN 问题,我猜它很快就会得到修复
问题已通过清除卸载间隔得到解决
componentWillUnmount () {
this.interval && clearInterval(this.interval);
this.interval = false;
}