reactjs - React Hook useEffect 缺少依赖项问题
问题描述
我有这个问题:
Line 25:7: React Hook useEffect has missing dependencies: 'getSingleProductData', 'isProductOnSale', and 'productData'. Either include them or remove the dependency array react-hooks/exhaustive-deps
这是代码:
type SingleProductParams = {
s_id:string;
}
type SingleProductProps = RouteComponentProps<SingleProductParams>
const SingleProduct: React.FC<SingleProductProps> = (props) => {
let [productData, setProductData] = useState<Partial<IProdItems>>({});
let [isProductOnSale, setIsProductOnSale] = useState<Sale['onSale']>();
useEffect( () => {
setIsProductOnSale(productData.sale?.onSale);
getSingleProductData();
console.log(productData);
console.log(isProductOnSale);
console.log(props.match.params.s_id);
},[props])
const getSingleProductData = async() => {
let url = URL_API + "/products/single/" + props.match.params.s_id;
let data = await doApiGet(url);
console.log(data);
setProductData(data);
}
我该如何解决?我从谷歌尝试了各种方法,但这不起作用。但是页面一切正常,我得到了数据,一切都很好。我应该禁用错误吗?我必须提到,useEffect 中的控制台日志是未定义的,但站点中显示的数据!
解决方案
警告意味着您需要以这种方式添加getSingleProductData, isProductOnSale and productData
到useEffect
's deps 列表中:
useEffect( () => {
setIsProductOnSale(productData.sale?.onSale);
getSingleProductData();
console.log(productData);
console.log(isProductOnSale);
console.log(props.match.params.s_id);
},[props, getSingleProductData, isProductOnSale, productData]) //<-- here add them
警告消失了。
编辑
通过添加这些依赖项,您可能会遇到loop
问题(useEffect
具有将自行更新的依赖useEffect
项)。
在这种情况下,您可以初始化多个useEffect
s,每个人都有所需的依赖项:
useEffect(() => { //<-- this useEffect to set productData (it runs just one time at component loading)
getSingleProductData();
},[])
useEffect(() => { //<-- this useEffect to set isProductOnSale every time productData changes
setIsProductOnSale(productData.sale?.onSale);
}, [productData])
useEffect(() => { //<-- this useEffect print stuff
console.log(productData);
console.log(isProductOnSale);
console.log(props.match.params.s_id);
}, [productData, isProductOnSale, props])
推荐阅读
- javascript - jQuery addClass 工作,但 javascript classList.add 不工作
- html - 如何在手机上正确显示网页
- python - 如何从我的数据框中只省略周末?
- web-scraping - 如何抓取/下载具有特定标签的所有 tumblr 图像
- javascript - 通过选择按钮更改自键入文本无法正常工作
- python - 想要迭代一个函数 10 次,并取其值的平均值(python)
- django - 在哪里放置 Django 权限逻辑?
- javascript - 单击 headerCheckbox 时,不会为网格行调用 checkcolumn 事件(Extjs 6.6)
- angular - 使代理配置适用于 Firebase 托管
- ios - SKSpriteNode.centerRect 不适用于 SKTextureAtlas