К сожалению, useEffect
предназначен для запуска на первом рендере, и каждый раз, когда его зависимости меняются.
Чтобы избежать запуска на первом рендере, вам придется написать свой собственный маленький пользовательский хук.
const useComponentWillReceiveProps = (callback, dependencies) => {
const [firstRender, setFirstRender] = useState(true);
useEffect(() => {
if(firstRender) {
setFirstRender(false);
return;
}
callback();
}, dependencies);
}
Кроме того, вы также можете использовать ссылки, чтобы избежать первоначального повторного рендеринга, например:
const useComponentWillReceiveProps = (callback, dependencies) => {
const firstRender = useRef(true);
useEffect(() => {
if(firstRender.current) {
firstRender.current = false;
return;
}
callback();
}, dependencies);
}