Почему функция возврата? return () => {ignore = true};
Из документов ,
Почему мы вернули функцию из нашего эффекта? Это необязательный механизм очистки для эффектов. Каждый эффект может возвращать функцию, которая очищается после него. Это позволяет нам поддерживать логику добавления и удаления подписок близко друг к другу. Они являются частью одного и того же эффекта!
И
Когда именно React очищает эффект? React выполняет очистку, когда компонент отключается. Однако, как мы узнали ранее, эффекты запускаются для каждого рендера, а не только один раз. Вот почему React также очищает эффекты от предыдущего рендера, прежде чем запускать эффекты в следующий раз. Мы обсудим, почему это помогает избежать ошибок и как отказаться от такого поведения в случае, если это создает проблемы с производительностью, ниже.
Для чего используется игнорируемый в этом примере?
Первоначально в useEffect
Крюк ignore
установлен как let ignore = false;
.
Когда функция fetchProduct
выполняется, она проверяет, что ignore
равно true
, и, соответственно, устанавливает setProduct(json)
. Это означает, что у нас state
называется product
и устанавливается значение в state
с помощью setProduct(json)
. Это product
в состоянии используется для отображения деталей на странице.
Примечание: Поскольку [productId]
передается в качестве второго аргумента useEffect
, функция fetchProduct
будет выполняться только при изменении productId
.
См. оптимизация производительности путем пропуска эффектов .