useEffect导致无限渲染循环

时间:2020-05-04 18:37:40

标签: javascript reactjs react-hooks use-effect

我正在使用react useEffect从后端获取数据,但是它会不停地向我的终端发送相同的消息。

我的代码

function DataFetching() {

    let [posts, setPosts] = useState([]); 

    useEffect(() => {
        axios.get('http://localhost:8080/zoom')
            .then(res => {
                setPosts(res.data);
            })
            .catch(err => {
                console.log(err)
            })
    })

我在终端收到的垃圾邮件

Executing (default): SELECT `id`, `subject`, `MEETINGID`, `Password`, `createdAt`, `updatedAt` FROM `data` AS `data`;```

1 个答案:

答案 0 :(得分:2)

setPosts()导致DataFetching重新渲染,并且由于您的useEffect()未声明依赖项列表,因此它会在个渲染后评估效果,因此您基本上已经编写了一个异步无限循环。

您的效果仅取决于setPosts(),因此应将其声明为唯一的依赖项。或者,认识到setPosts()已经被React记住,根本不声明任何依赖项:

useEffect(() => {
  axios.get('http://localhost:8080/zoom').then(res => {
    setPosts(res.data);
  }).catch(err => {
    console.log(err);
  });
}, [/*setPosts*/]);