Я работаю над приложением React с некоторыми useEffect
хуками. Допустим, у меня есть следующий код:
import React, { useState, useEffect } from 'react';
export default () => {
const [fooArr, setFooArr] = useState([]);
const [barObj, setBarObj] = useState({});
return <h1>{barObj.name + " " + barObj.status}</h1>
}
Но теперь проблема. fooArr
изменяется где-то еще, и я хочу обновить barObj
при изменении fooArr
. Я сделал это, как показано ниже:
import React, { useState, useEffect } from 'react';
export default () => {
const [fooArr, setFooArr] = useState([]);
const [barObj, setBarObj] = useState({});
// >>> some fetching and setting of 'fooArr' here <<<
useEffect(() => {
setBarObj(barObj => {
let _barObj = { ...barObj };
_barObj.status = fooArr[1];
return _barObj;
})
}, [fooArr]);
return <h1>{barObj.name + " " + barObj.status}</h1>
}
Однако это дает мне следующую ошибку React Hook useEffect has a missing dependency: 'barObj' and 'setBarObj'. Either include it or remove the dependency array
. Я точно знаю, что это означает , но когда я включаю его, я получаю бесконечный повторный рендеринг l oop, потому что он продолжает обновляться . Теперь у меня есть // eslint-disable-line
рядом с массивом зависимостей, чтобы игнорировать это. Но я чувствую, что этого никогда не следует делать.
Как мне с этим справиться? Я бы хотел не получать сообщение об ошибке, но также не иметь бесконечного повторного рендеринга l oop ..
Пример с дополнительным кодом, который похож на мой код:
useEffect(() => {
setBarObj(prevBarObj => {
let _barObj = { ...prevBarObj };
if(_barObj.status.includes('hello') {
_barObj.status += "world"
} else {
_barObj.status = "other"
}
return _barObj;
})
}, [fooArr])