使用React Hooks多次获取数据axios

我想从Github用户和他的仓库中获取全局信息(并获得固定的仓库会很棒)。我尝试通过异步等待来实现,但这是正确的吗?我有4次reRender(4次控制台日志)。提取所有数据后是否可以等待所有组件重新渲染?

function App() {

const [data, setData] = useState(null);

const [repos, setRepos] = useState(null);

useEffect(() => {

const fetchData = async () => {

const respGlobal = await axios(`https://api.github.com/users/${username}`);

const respRepos = await axios(`https://api.github.com/users/${username}/repos`);

setData(respGlobal.data);

setRepos(respRepos.data);

};

fetchData()

}, []);

if (data) {

console.log(data, repos);

}

return (<h1>Hello</h1>)

}

回答:

批处理多个状态更新,但前提是状态更新是在事件处理程序中同步发生的,而不是setTimeoutsor async-await wrapped

methods

此行为类似于类,因为在您的情况下,由于发生了两个状态更新调用,因此它执行两个状态更新周期

因此,最初您有一个初始渲染,然后有两个状态更新,这就是组件渲染三次的原因。

由于您的案例中的两个状态是相关的,因此您可以创建一个对象并一起更新它们

function App() {

const [resp, setGitData] = useState({ data: null, repos: null });

useEffect(() => {

const fetchData = async () => {

const respGlobal = await axios(

`https://api.github.com/users/${username}`

);

const respRepos = await axios(

`https://api.github.com/users/${username}/repos`

);

setGitData({ data: respGlobal.data, repos: respGlobal.data });

};

fetchData();

}, []);

console.log('render');

if (resp.data) {

console.log("d", resp.data, resp.repos);

}

return <h1>Hello</h1>;

}

以上是 使用React Hooks多次获取数据axios 的全部内容, 来源链接: utcz.com/qa/400607.html

回到顶部