Несколько обновлений состояния пакетируются, но только если они происходят синхронно из обработчиков событий, а не setTimeouts
или async-await wrapped methods
.
Это поведение аналогично классам, и в вашем случае выполняется два цикла обновления состояния из-за двух вызовов обновления состояния
Итак, изначально у вас есть начальный рендер, а затем у вас есть два обновления состояния, поэтому компонент рендерит три раза.
Так как два состояния в вашем случае связаны, вы можете создать объект и обновить их вместе liek
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>;
}
Рабочая демоверсия