首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么useEffect被无限地称为

为什么useEffect被无限地称为
EN

Stack Overflow用户
提问于 2022-04-27 15:01:56
回答 2查看 68关注 0票数 0

在react组件中的useEffect中,我获取数据并更新状态,但我不知道为什么总是执行useEffect:

代码语言:javascript
复制
const Comp1 = () => {
    const [studies, setStudies]= useState([]);
    React.useEffect( async()=>{
          await axios.get('/api/expert/',
         )
        .then((response) => {
          setStudies(response.data.studies);     
    
        },  (error) => {
          console.log(error );
        })
          console.log("called+ "+ studies);
    
    },[studies]);
    return(
         <Comp2 studies={studies}/>
          )

}

这是我在第一个组件中使用的第二个组件..。

代码语言:javascript
复制
 const Comp2 = (props) => {
        const [studies, setStudies]= useState([]);
        React.useEffect( ()=>{

              setStudies(props.studies)
        
        },[props.studies, studies]);


        return(
             studies.map((study)=>{console.log(study)})
    
    }
EN

回答 2

Stack Overflow用户

发布于 2022-04-27 15:04:06

编辑

代码语言:javascript
复制
const Comp2 = (props) => {

  // for some brief time props.studies will be an empty array, []
  // you need to decide what to do while props.studies is empty.

  // you can show some loading message, show some loading status,
  // show an empty list, do whatever you want to indicate
  // progress, dont anxious out your users
  return (
    props.studies.map((study)=>{console.log(study)}
  )
}

您的useEffect钩子取决于状态研究收到的更新。在这个useEffect钩子中,您可以更新研究。你能看到useEffect触发自己吗?

每当B更新时,A就会运行。(永远继续)

我会怎么做?

代码语言:javascript
复制
const Comp1 = () => {
  const [studies, setStudies]= useState([]);
  React.useEffect(() => {
    const asyncCall = async () => {
      await axios.get('/api/expert/',
      )
      .then((response) => {
        setStudies(response.data.studies);     
      }, (error) => {
        console.log(error );
      })
      
      console.log("called+ "+ studies);
    }
      
    asyncCall();
  }, []);

  return(
    <Comp2 studies={studies}/>
  )
}
票数 2
EN

Stack Overflow用户

发布于 2022-04-27 15:09:10

useEffect()有依赖数组,如果它中有任何值更新,就会执行它。在这里,setStudies更新作为依赖数组提供的studies,并使它再次运行等等。若要防止这种情况,请从依赖项数组中删除studies。参考:How the useEffect Hook Works (with Examples)

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

https://stackoverflow.com/questions/72031016

复制
相关文章

相似问题

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