Проблема:
В основном платформа React может отображать компонент почти любое количество раз на этапе рендеринга, чтобы вычислить разницу, чтобы увидеть, что нужно сбросить в DOM во время фаза фиксации. Журнал вашей консоли находится в теле функции, поэтому он выполняется каждый раз, когда response вычисляет эту разницу.
введите описание изображения здесь
«Фаза рендеринга» ... Может быть приостановлена, прервана или перезапущена с помощью React.
Решение:
Попробуйте использовать эффект для регистрации чего-либо, поскольку он гарантированно запускается один раз за цикл рендеринга (рендеринг + фиксация). Здесь вы увидите только один журнал на каждое обновление / вызов setLoading
.
function Main() {
useEffect(() => {
console.log("Main re-render");
})
const [, setLoading] = useLoading();
return (
<div>
<h3>Main</h3>
<button onClick={() => setLoading(true)}>Start Loading</button>
<button onClick={() => setLoading(false)}>End Loading</button>
</div>
);
}