Если вы не используете метод fetchBususiness где-либо кроме эффекта, вы можете просто переместить его в эффект и избежать предупреждения
useEffect(() => {
const fetchBusinesses = () => {
return fetch("theURL", {method: "GET"}
)
.then(res => normalizeResponseErrors(res))
.then(res => {
return res.json();
})
.then(rcvdBusinesses => {
// some stuff
})
.catch(err => {
// some error handling
});
};
fetchBusinesses();
}, []);
Если вы используете fetchBususiness за пределами рендера, вы должны отметить две вещи
- Если есть какая-либо проблема, если вы не передадите
fetchBusinesses
как метод и что она используется во время монтирования с закрывающим закрытием, проблем не будет.
- Зависит ли ваш метод от некоторых переменных, которые он получает из закрытого замыкания, что не относится к вам.
- При каждом рендеринге fetchBususiness будет воссоздан, и, следовательно, передача его в useEffect вызовет проблемы. Поэтому сначала вы должны запомнить fetchBususiness, если вам нужно было передать его в массив зависимостей.
Подводя итог, я бы сказал, что если вы используете fetchBusinesses
за пределами useEffect
, вы можете отключить правило, используя // eslint-disable-next-line react-hooks/exhaustive-deps
, в противном случае вы можете переместить метод внутрь useEffect
Чтобы отключить правило, вы должны написать его как
useEffect(() => {
// other code
...
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])