javascript - ReactJS - 警告消息'Hook useEffect 缺少依赖项'
问题描述
我在控制台中收到消息:
React Hook useEffect 缺少依赖项:'calculateTotalProductsPrice'。包括它或删除依赖数组
代码正在运行,但我不知道这是否是实现 useEffect 的正确方法
在这里,我有一个计算产品总价的函数,并在我的 useEffect 挂钩中调用它:
// Get all products the user added from my redux store
const allProductsAddedByUser = useSelector(state => state.createCampaign.campaign_products)
function calculateTotalProductsPrice() {
const productsArray = Object.values(allProductsAddedByUser)
const totalPrice = productsArray.reduce(function (prev, cur) {
return prev + cur.quantity * 125.0
}, 0)
return totalPrice
}
useEffect(() => {
calculateTotalProductsPrice()
}, [allProductsAddedByUser])
在我的 html 中,我正在调用这样的函数:
<span>€ {calculateTotalProductsPrice()}</span>
如果我将calculateTotalProductsPrice()
函数放在我的 useEffect 钩子中,来自控制台的警告就消失了,但是我不能像以前那样调用我的函数,我得到了错误'calculateTotalProductsPrice' is not defined
。我的函数现在在 useEffect 钩子里面,为什么我不能从外面给她打电话?
// Get all products the user added from my redux store
const allProductsAddedByUser = useSelector(state => state.createCampaign.campaign_products)
useEffect(() => {
function calculateTotalProductsPrice() {
const productsArray = Object.values(allProductsAddedByUser)
const totalPrice = productsArray.reduce(function (prev, cur) {
return prev + cur.quantity * 125.0
}, 0)
return totalPrice
}
calculateTotalProductsPrice()
}, [allProductsAddedByUser])
// Call function from my html
<span>€ {calculateTotalProductsPrice()}</span>
// Error calculateTotalProductsPrice is not defined
解决方案
关于警告信息:
在这种情况下有 2 种情况。
第一个是当前场景,当您calculateTotalProductsPrice
在代码中的其他地方需要该函数时,您需要在useEffect
. 如果将其传递给所谓的依赖数组,则添加一个,如下所示:
function calculateTotalProductsPrice() {
// ... your calculation code
}
useEffect(() => {
calculateTotalProductsPrice()
}, [calculateTotalProductsPrice])
在这种情况下,警告消息将不会再次显示,同时它也可以在 JSX 中访问,就像<span>€ {calculateTotalProductsPrice()}</span>
.
其次,一旦您不需要calculateTotalProductsPrice
外部的函数,useEffect
您就可以像在第二个示例中那样在回调内部创建。
关于功能的可访问性:
calculateTotalProductsPrice
声明后无法在外部访问该函数的原因useEffect
是由于 JavaScript 作用域。由于关闭,该函数只能在useEffect
钩子内部访问,来自文档:
闭包是捆绑在一起(封闭)的函数与对其周围状态(词法环境)的引用的组合。换句话说,闭包使您可以从内部函数访问外部函数的范围。在 JavaScript 中,每次创建函数时都会在创建函数时创建闭包。
在这里进一步阅读:
我希望这有帮助!
推荐阅读
- reactjs - 如何用 Jest 和 Enzyme 处理函数中的状态变化
- r - 有条件地删除 R 中的行
- jquery-select2 - select2设置颜色li元素
- sql - RegEx 匹配有效日期 Presto
- postgresql - 如何从插入到 postgres 外部表中获取生成的 id?
- visual-studio-code - URL for opening vscode in file in WSL workspace
- ios - App Tracking Transparency 消息未在某些设备中显示
- ios - 如何区分不同配置的网络?
- html - 里面的文字和其他东西不会变成卡片颜色......我是设计新手,将不胜感激
- python - 有没有办法腌制对象,以便在单独运行中检索它们