Шаблон, которому вы должны следовать, зависит от вашего useCase.
Первый . Может возникнуть ситуация, когда вам нужно добавить прослушиватель событий во время первоначального монтирования и очистить их приunmount и другой случай, когда конкретный слушатель должен быть очищен и повторно добавлен при смене реквизита.В таком случае лучше использовать два разных useEffect, чтобы сохранить соответствующую логику вместе, а также иметь преимущества в производительности
useEffect(() => {
// adding event listeners on mount here
return () => {
// cleaning up the listeners here
}
}, []);
useEffect(() => {
// adding listeners everytime props.x changes
return () => {
// removing the listener when props.x changes
}
}, [props.x])
Секунда: В некоторых случаях может потребоваться запусквызов API или какой-либо другой побочный эффект, когда какое-либо состояние или реквизит изменяются среди набора.В таком случае хорошей идеей будет один useEffect
с соответствующими значениями для мониторинга
useEffect(() => {
// side effect here on change of any of props.x or stateY
}, [props.x, stateY])
Третий: Третий случай, когда вам нужно предпринять различные действия при измененииразных значений.В таком случае разделите соответствующие сравнения на различные useEffects
useEffect(() => {
// some side-effect on change of props.x
}, [props.x])
useEffect(() => {
// another side-effect on change of stateX or stateY
}, [stateX, stateY])