首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这是反应组件呈现无限?

为什么这是反应组件呈现无限?
EN

Stack Overflow用户
提问于 2022-06-04 02:20:41
回答 1查看 41关注 0票数 1

在这里,我对这个react组件有一个问题:

代码语言:javascript
复制
import React, { useState, useEffect } from 'react'
import StickyNote from './StickyNote';

function StickyNotes() {

  const [stickyNotes, setStickyNotes] = useState([]);

  useEffect(() => {
    console.log("Here")
    fetch("http://localhost:8080/notes")
    .then(res => res.json())
    .then(data => setStickyNotes(data))
    .catch(error => console.log('Error: ', error))
  }, [stickyNotes])
    
  
  return (
    <div className="d-flex flex-wrap justify-content-center m-5" >
      {stickyNotes.map((note) => <StickyNote title={note.title} body={note.body} id={note.id} key={note.id} />)}
    </div>
  )
}

export default StickyNotes

我试图得到所有的笔记,所以我做了一个得到的要求,我的后端。当我第一次运行我的应用程序时,我注意到我的组件一直在无限地呈现。我知道我可以为依赖传递一个空数组,这个行为就会停止。问题是,每次更改useEffect状态时,我都需要运行stickyNotes钩子,这样当用户创建便笺时,屏幕就会使用新的便笺进行更新。如果我传入一个空数组,这是行不通的。我的印象是,将stickyNotes变量传入依赖项数组只会在此值更改时运行useEffect,但即使stickyNotes未被更新也会运行。是什么导致这件事无止境地运行?

EN

回答 1

Stack Overflow用户

发布于 2022-06-04 04:03:59

它无限地呈现,因为useEffectstickyNotes作为依赖项,并且您还在更新useEffect回调中的stickyNotes。这使得useEffect无限地运行。要修复这个问题,您可以做一件事,即创建一个单独的函数来获取注释,并在stickyNotes更改时调用它,并在useEffect中调用它,同时也不需要依赖项。

代码语言:javascript
复制
import React, { useState, useEffect } from 'react'
import StickyNote from './StickyNote';

function StickyNotes() {

  const [stickyNotes, setStickyNotes] = useState([]);
  const getNotes = () =>{
    //call this function whenever you are changing stickyNotes.
    fetch("http://localhost:8080/notes")
      .then(res => res.json())
      .then(data => setStickyNotes(data))
      .catch(error => console.log('Error: ', error))
  }
  useEffect(() => {
    getNotes();
  }, [])
    
  
  return (
    <div className="d-flex flex-wrap justify-content-center m-5" >
      {stickyNotes.map((note) => <StickyNote title={note.title} body={note.body} id={note.id} key={note.id} />)}
    </div>
  )
}

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

https://stackoverflow.com/questions/72496631

复制
相关文章

相似问题

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