我知道这个问题已经得到了很多次的回答,但我的挑战是特殊的,因为我在这里尝试了所有的答案,但仍然没有运气。 这是我的代码
export default class scrollLogic extends Component{
constructor(props) {
super(props);
this.state={
scroll:false
};
this.scrollDetector=this.scrollDetector.bind(this)
}
scrollDetector(ev) {
console.log("Scrolling!");
}
componentDidMount() {
const list = ReactDOM.findDOMNode(this.refs.list)
list.addEventListener('scroll', this.scrollDetector);
}
componentWillUnmount() {
const list = ReactDOM.findDOMNode(this.refs.list)
list.removeEventListener('scroll', this.scrollDetector);
}
render() {
return (
<div ref="list" className="header-holder"></div>
)
}
}
答案 0 :(得分:0)
我想问题是你正在使用componentDidMount
方法,该方法在组件渲染后调用。尝试使用componentWillMount
而不是componentDidMount
。
答案 1 :(得分:0)
我意识到onScroll事件应该只用于本身有滚动条的容器,因此使用window.addEventListener('scroll', this.scrollDetector)
代替了解决问题。因为它会监听窗口本身的滚动而不是div。
所以我将代码格式化为这样
export default class scrollLogic extends Component{
constructor(props) {
super(props);
this.state={
scroll:false
};
this.scrollDetector=this.scrollDetector.bind(this)
}
scrollDetector() {
this.setState({
scroll:true
})
}
componentDidMount() {
const list = ReactDOM.findDOMNode(this.refs.list)
window.addEventListener('scroll', this.scrollDetector);
}
componentWillUnmount() {
const list = ReactDOM.findDOMNode(this.refs.list)
window.removeEventListener('scroll', this.scrollDetector);
}
render() {
return (
(this.state.scroll)? <HeaderMin/>:<HeaderMax/>
)
}
}
我希望这有助于某人......