Reactjs 反应功能组件状态始终记录初始值
我将在滚动div底部时更新状态。 我已经成功地检测到用户在div底部滚动,但是更新状态总是记录初始值。 这是我的密码Reactjs 反应功能组件状态始终记录初始值,reactjs,react-hooks,react-functional-component,Reactjs,React Hooks,React Functional Component,我将在滚动div底部时更新状态。 我已经成功地检测到用户在div底部滚动,但是更新状态总是记录初始值。 这是我的密码 const ExampleApp = () => { const [value, setValue] = useState(0); useEffect(() => { document.addEventListener('scroll', trackScrolling); return () => {
const ExampleApp = () => {
const [value, setValue] = useState(0);
useEffect(() => {
document.addEventListener('scroll', trackScrolling);
return () => {
document.removeEventListener('scroll', trackScrolling);
}
}, []);
const trackScrolling = () => {
const wrappedElement = document.getElementById('vContainer');
if (isBottom(wrappedElement)) {
// Here user scrolled to bottom of a div
console.log('Log Value: ', value); // I want to see the increased value, but always logs 0 every time I scrolled bottom.
setValue(value + 1);
}
}
}
我很好奇,为什么每次检测到视图底部时,该值不会增加。
当我检测到底部时,增加状态值的解决方案是什么。
提前感谢。在设置新值之前,您的控制台语句会发生,只需将两行切换为:
setValue(value + 1);
console.log('Log Value: ', value);
这是因为关闭而发生的
使用document.addEventListener'scroll',trackScrolling,函数属性trackScrolling将附加到listener,并与初始值(即0)绑定
检查此代码段:
尝试代码段时不要单击整个页面,否则将看不到滚动
功能应用程序{
const[value,setValue]=React.useState0
函数isBottome{return true}
React.useffect=>{
document.addEventListener“滚动”,跟踪滚动
返回=>{
document.removeEventListener'scroll',trackScrolling
}
}, []
常量跟踪滚动==>{
const wrappedElement=document.getElementById'vContainer'
如果是BottomWrappedElement{
console.log'log Value1:',value
setValueprev=>{
console.log'log Value2:',prev+1;
返回prev+1;
}
}
}
返回{value}
}
ReactDOM.render,document.getElementById'mydiv'
好但如果我试图在几秒钟后到达视图的底部,它仍然记录为0而不是1。我不确定我是否遵循,您能提供一个工作示例吗?嗯。。。函数isBottom是在其他地方定义的,我确信检测bottom很好。当我检测到视图的底部时,我试图增加状态值。但每次我点击视图底部时,它总是记录为0。我刚刚尝试了您的示例代码,但它总是记录为0。你这方面的价值增加了吗?嗯。。。对但是你能看到控制台日志吗?每次我向上滚动并触底时,它总是记录值0。此外,浏览器中的值始终为1。为什么它没有增加?应用这种方法也可能是排队。。谢谢你。我试过你的解决办法。但日志值1始终为0,日志值2增加了值。1,2,3…@daniels是的。我留着它是为了看区别。日志值1将始终为0。为什么它始终为0而不是增加的值?我们调用了setValue函数。因为初始值在闭包中被绑定。更多关于结束:,谢谢。useRef就是我要找的+1.