javascript - 使用 axios react useEffect

标签 javascript reactjs sockets react-hooks axios

下面是一段代码,用于通过 axiosurl 获取数据,

import React, { useState, setEffect, useEffect } from 'react';
import axios from "axios";
import LoadingPage from "./LoadingPage";
import Posts from "./Posts";

const url = "https://api-post*****";

function App() {
    const [posts, setPosts] = useState([]);
    
    const fetchPost = async() => {
        try {
            const response = await axios(url);
            return response.data;
        } catch (error) {
            console.error(error);
        }
    };
    
    let data = fetchPost();
    setPosts(data);
    
    return (
        <main>
            <div className="title">
                <h2> Users Posts </h2>
                {posts.length
                ? <Posts posts={posts} />
                : <Loading posts={posts} />
                }
            </div>
        </main>
    );
}

export default App;

但是,它得到了错误

uncaught Error: Too many re-renders. React limits the number of renders to prevent an infinite

问题 1:这怎么可能是重新渲染次数过多,没有循环什么的?

要解决此错误,我们可以使用以下更改:

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

  const fetchPost = async () => {
    try {
      const response = await axios(url);
      setPosts(response.data);
    } catch (err) {
      console.error(err);
    }
  };

  useEffect(()=> {
    fetchPost();
  }, [posts])

问题 2:useEffect 如何避免过多调用?

问题 3:我总是将 React hooks 视为 web socket 通信等。如果是这样的话?

最佳答案

当您调用setPosts时,组件将再次渲染,并再次获取数据,此时您使用数据设置状态,强制进行新的渲染以获取数据......等等。

通过使用useEffect,您可以获取数据,并设置状态一次 when the component is first rendered使用空的依赖项数组。

useEffect(() => {
  // Fetch the data
  setposts(data);
}, []);

您可能不想像在 this useEffect 中观看 posts (您可以有很多),就像您在更新了示例,因为您可能会遇到同样的问题。

关于javascript - 使用 axios react useEffect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72357568/

相关文章:

javascript - 异步函数try catch block 是否可以包装称为异步函数,这也可能引发错误?

c# - 如何在 ASP.NET MVC 中使用 javascript 编写 Action 链接?

javascript - jQuery在一个公共(public)div中的单独段落中滑动而不滑动整个div

javascript - 如何仅在第一次播放声音 false value after true

c - fgets 会更改文件描述符集吗?

javascript - 转换 CSS 样式对 <a> 标签没有影响

javascript - React select onChange 不使用选项值

reactjs - 如何使react-admin默认主题RTL

sockets - 如何解密bet365套接字数据

java - 需要在Tomcat服务器中抓取传入的URL请求