这是我的代码:https://codesandbox.io/s/busy-tdd-e8s1ej?file=/src/App.js
对于react-router-dom,我使用了ver5.2+。
我不能为我的生活弄清楚失踪的依赖关系,我试图在这里寻找答案,但它告诉我添加到依赖关系,但无济于事。
我很感激任何关于这个问题的启发,谢谢
这是我的代码:https://codesandbox.io/s/busy-tdd-e8s1ej?file=/src/App.js
对于react-router-dom,我使用了ver5.2+。
我不能为我的生活弄清楚失踪的依赖关系,我试图在这里寻找答案,但它告诉我添加到依赖关系,但无济于事。
我很感激任何关于这个问题的启发,谢谢
3条答案
按热度按时间p5cysglq1#
因为您使用的是
useEffect
之外定义的内容(在本例中是fetchProduct
函数),react将抛出一个警告,指出**如果fetchProduct
函数内部发生了某些更改,useEffect
将不会捕捉到该更改。**例如:假设fetchProduct
中的match.params.id
在页面第一次加载时等于1
,但后来match.params.id
变为2
,useEffect
中的fetchProduct
函数仍将使用1
作为match.params.id
,因为useEffect
没有捕捉到更改。所以要解决这个警告,有两个选择,第一个是在
useEffect
里面写fetchProduct
函数逻辑:使
match.params.id
在依赖性数组中以确保useEffect
是最新的。但是如果你需要重用
fetchProduct
函数,那么你应该做如下的事情:pjngdqdw2#
这是一个警告,请查看
useEffect()
的文档https://reactjs.org/docs/hooks-effect.html.
每当你在数组中添加一个依赖项时,它会监视所有这些值,并且每当那个特定的值/依赖项改变时,它会重新运行
useEffect
钩子。https://reactjs.org/docs/hooks-effect.html#:~:text=React%20to%20skip%20applying%20an%20effect%20if%20certain%20values%20haven%E2%80%99t%20changed%20between%20re%2Drenders
iezvtpos3#
您在效果中使用的是
fetchProduct
函数,因此它是一个依赖项。错误消息应该会告诉您这一点。一种解决方法是将
fetchProduct
函数移到效果中,这样match
将成为效果的依赖项,但您可能希望match
更改为您最希望获取的新产品。