使用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>)
}
回答:
批处理多个状态更新,但前提是状态更新是在事件处理程序中同步发生的,而不是setTimeouts
or 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