Reactjs 反应功能组件状态始终记录初始值

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 () => {

我将在滚动div底部时更新状态。 我已经成功地检测到用户在div底部滚动,但是更新状态总是记录初始值。 这是我的密码

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.