首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数在inView中的反应中调用无穷次

函数在inView中的反应中调用无穷次
EN

Stack Overflow用户
提问于 2022-03-18 14:57:00
回答 2查看 233关注 0票数 0

未明错误:超过最大更新深度。当组件在componentWillUpdate或componentDidUpdate中反复调用componentDidUpdate时,就会发生这种情况。React限制嵌套更新的数量,以防止无限循环。

代码语言:javascript
复制
import React, { useEffect, useRef } from 'react';

import { useNavigate } from 'react-router-dom';

import { useInView } from 'react-intersection-observer';


const About = () => {
  const navigate = useNavigate()
  
  const { ref, inView, entry } = useInView({
    
  });
  
 
  
    if(inView)  {navigate('/#about')}

  
  return (
    <div ref={ref}  className='about-container' id="about">
      
      
       
    </div>
  )
}

export default About
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-18 15:07:56

问题是您正在直接调用navigate('/#about'),这将导致该组件重新呈现的循环。解决办法可能是

代码语言:javascript
复制
import React, { useEffect, useRef } from 'react';

import { useNavigate } from 'react-router-dom';

import { useInView } from 'react-intersection-observer';


const About = () => {
  const navigate = useNavigate()
  
  const { ref, inView, entry } = useInView({
    
  });
  
   //when your `inView` value change, you change hash
   useEffect(() => {
      if(inView)  {navigate('/#about')}
   }, [inView])
  
    

  
  return (
    <div ref={ref}  className='about-container' id="about">
      
      
       
    </div>
  )
}

export default About
票数 1
EN

Stack Overflow用户

发布于 2022-03-18 15:08:17

看起来你被困在一个无限循环中,因为这一行

代码语言:javascript
复制
if(inView)  {navigate('/#about')}

About组件加载时,它会显示带有#about id的div,从而使它成为inView。这反过来会调用导航,这会使您一次又一次地到达#about div,一次又一次地重复。

根据我的理解,inView钩子应该用来记录度量指标,比如某人滚动超过某个点的频率,或者触发某种Javascript代码,比如当某人到达页面底部时显示一个模式。您可以始终使用它导航到一个新组件,而不是同一个组件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71528966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档