[英]How to make a component show/hide on scroll in react.js
我只是在用户向下滚过标题时尝试制作页脚横幅,并在用户向上滚动到顶部时隐藏它。 我对如何实现这个的想法是在页面的顶部组件中为scroll事件添加一个事件监听器。 这是我目前的代码。 但它不起作用:
componentDidMount() {
this.nv.addEventListener('scroll', this.handleScroll);
}
handleScroll(e) {
if(window.pageYOffset > 50 && window.pageYOffset < 900) {
console.log('scrolled');
this.setState({
showBanner: true,
});
} else {
this.setState({
showBanner: false,
});
}
}
顶级组件的渲染方法:
render() {
return (
<div ref={elem => this.nv = elem}>
<Header/>
<Body
userInfo={this.props.userInfo}
history={this.props.history}
/>
{
this.state.showBanner && <Banner/>
|| null
}
</div>
)
}
我没有看到任何日志,滚动时显然没有调用setState
。
关于如何实现预期目标的任何建议?
* UPDATE *更改了componentDidMount
以在窗口上添加事件监听器,现在它正在工作。
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
}
原因是您正在尝试将事件侦听器添加到尚不存在的引用中。 componentDidMount
在初始渲染之前发生。 这意味着您在渲染中分配的引用尚未设置。
您可以使用ref回调并在其中附加事件侦听器:
applyRef = ref => {
this.vn = ref;
this.vn.addEventListener('scroll', this.handleScroll);
}
render() {
return (
<div ref={this.applyRef}>
<Header/>
<Body
userInfo={this.props.userInfo}
history={this.props.history}
/>
{
this.state.showBanner && <Banner/>
|| null
}
</div>
)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.