React Hook useEffect缺少一个依赖项:'props'



我正在尝试使用react Hook(这是我第一次(,但在使用像上面的组件DidMount一样的useEffect时遇到了这个错误:"react Hook useEffect缺少依赖项:"props"。请将其包括在内或删除依赖项数组。但是,当任何道具时,"道具"都会发生变化更改,因此首选的修复方法是在useEffect调用之外销毁"道具"对象,并引用useEffect 中的特定道具

我正在尝试向API发出GET请求,这需要在url中使用一些道具。这是我的代码:

function SomeComponent(props) {
const [data, setData] = useState({});
const [loading, setLoading] = useState(true);
const [hasError, setErrors] = useState(false);

useEffect(() => {
async function fetchData() {
try {
let response = await Axios.get( `/some-url/${props.obj.id}/abc`,

);
let { data } = response.data;
setData(data);
setLoading(false);
props.totalStats({data });
} catch (error) {
setErrors(error);
setLoading(false);
}
}
fetchData();
}, []);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

我一直在寻找并尝试这些解决方案,但它们对我不起作用:

const { id } = props.obj.id;
const {totalStats} = props.totalStats
useEffect(()=>{
//Here is the code
//I replace the $ {props.obj.id} by the id and the function props.totalStats by //totalStats
},[id,totalStats]

通过这种方式,我在id和函数调用中获得了一个未定义的值。

然后我试着这样做:

useEffect(()=>{
//here is the code like the first one
},[props])

但这使得向api 发出n个请求

从常量导入中删除大括号。

所以它应该看起来像这样:

function SomeComponent(props) {
const objId = props.obj.id;
const totalStats = props.totalStats;

const [data, setData] = useState({});
const [loading, setLoading] = useState(true);
const [hasError, setErrors] = useState(false);

useEffect(() => {
async function fetchData() {
try {
let response = await Axios.get( `/some-url/${objId}/abc`,

);
let { data } = response.data;
setData(data);
setLoading(false);
totalStats({data });
} catch (error) {
setErrors(error);
setLoading(false);
}
}
fetchData();
}, [objId, totalStats]);
}

答案已经被接受,但只是为了澄清为什么OP的解决方案一开始就不起作用,而不是分配常量。这是因为OP在破坏属性时犯了一个错误。正确的方法:

const { id } = props.obj;
const {totalStats} = props

请注意,我没有放置props.object.idprops.totalStats。因为如果你放了这些,你实际上是在试图从props.object.id对象中破坏id。CCD_ 5和CCD_。没有这样的属性,所以OP得到了未定义的错误。

您还可以从props对象中指定一个常量作为接受答案的方式。这实际上是一回事。

相关内容

最新更新