【发布时间】:2025-11-25 01:55:01
【问题描述】:
在以下代码中,在componentWillUnmount 上,我删除了滚动事件侦听器,但开发工具总是抛出以下错误:
setState(...):只能更新一个挂载或挂载的组件。这通常意味着您在未安装的组件上调用了 setState()。这是一个无操作。请检查未定义组件的代码。
代码:
render () {
let opa=!this.state.opa?
{
backgroundColor:'#fff',
borderBottom:'.01rem solid #e8e8e8'
}:null;
return (
<div id='search' style={opa}>
<input type='text' placeholder=''/>
<div id='ser_scan'></div>
</div>
)
}
toggle_opa () {
let opa;
let _top=~~(document.body.scrollTop*100/parseInt(document.documentElement.style.fontSize,10))
opa=_top>=215?false:true;
console.log(1)
this.setState({opa})
}
componentDidMount() {
document.addEventListener('scroll',this.toggle_opa.bind(this));
}
componentWillUnmount() {
console.log(1231)
document.removeEventListener('scroll',this.toggle_opa)
}
怎么了?
【问题讨论】:
-
我相信你在 toggle_opa 中用于 setState 的变量 opa 不是一个对象。你也确定,你在使用 setState 之前启动状态
-
你试过了吗。 document.removeEventListener('scroll',this.toggle_opa.bind(this))。错误是因为组件未卸载。
标签: javascript reactjs