В большинстве примеров реакции, которые я видел, люди, кажется, избегают помещать код непосредственно в тело функционального компонента, а вместо этого помещают его в useEffect(() => {...})
. Например, в официальных документах :
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
Почему это лучше, чем просто писать:
function Example() {
const [count, setCount] = useState(0);
document.title = `You clicked ${count} times`;
return (...);
}
В обоих случаях заголовок документа будет установлен на каждом рендере , (Я полагаю, что с useEffect()
код выполняется после рендеринга, но в данном примере это не так, верно)
Я понимаю значение useEffect()
, если :
- Состояния передаются как второй параметр, поэтому код будет выполняться не при каждом рендеринге, а с учетом указанных изменений состояния.
- Мы используем преимущества механики очистки .
Но без этого? Есть ли еще причина заключать код в useEffect()
?