我正在使用class
中的header
通过setState
将addEventListener
添加到componentDidMount
。 state
的{{1}}在scrolling
的{{1}}处被设置为false
,并且在滚动时,0
被更新为scrollY
并添加了state
。
例如
true
在GatsbyJS class
中。当用户返回页面顶部时,它在页面和模板之间完美地工作。
但是,在某些情况下,例如componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll);
}
handleScroll = () => {
if (window.scrollY === 0 && this.state.scrolling === true) {
this.setState({ scrolling: false });
} else if (window.scrollY !== 0 && this.state.scrolling !== true) {
this.setState({ scrolling: true });
}
};
通过layout
进行更改,或者用户在浏览器上回击时,动作将保持先前的route
位置。
在这种情况下,modal
不是scrollY
,但是scrollY
中的0
仍显示state
。我想这是因为即使scrolling
显示了实际位置,false
scrollY
最初还是state
,直到用户滚动为止。 scrolling
如果false
不是console
,如何确保在更改路线时将state
scrolling
更新为true
?
答案 0 :(得分:1)
实例化后,应运行一次handleScroll
方法以捕获初始状态。现在,您依靠的是滚动位置在最顶部,但是正如您所发现的,回到历史记录会导致不同的初始状态。
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
this.handleScroll();
}