reactjs - 错误:React Hook useEffect 缺少依赖项:'dispatch'。包括它或删除依赖数组
问题描述
试图调度一个动作,但我的终端出现了这个错误。
错误:React Hook useEffect 缺少依赖项:'dispatch'。包括它或删除依赖数组
但是我的代码不会在屏幕上呈现。
function CartPage(props) {
const dispatch = useDispatch();
const [Total, setTotal] = useState(0);
const [ShowTotal, setShowTotal] = useState(false);
const [ShowSuccess, setShowSuccess] = useState(false);
useEffect(() => {
let cartItems = [];
if (props.user.userData && props.user.userData.cart) {
if (props.user.userData.cart.length > 0) {
props.user.userData.cart.forEach((item) => {
cartItems.push(item.id);
});
dispatch(getCartItems(cartItems, props.user.userData.cart)).then(
(response) => {
if (response.payload.length > 0) {
calculateTotal(response.payload);
}
},
);
}
}
}, [props.user.userData]);
}
解决方案
这是一个 linting 规则exhaustive-deps
。目的是让您仅使用第二个参数中使用的道具或状态变量。
因为你的第二个参数不包括dispatch
你得到一个错误。如果您将调度添加到应该消失的第二个参数。
useEffect(() => {
// your logic here
}, [props.user.userData, dispatch])
这样做的缺点是,只要您的userData
ordispatch
发生变化,您的效果就会运行。您可以使用 忽略此规则// eslint-disable-next-line react-hooks/exhaustive-deps
。
推荐阅读
- visual-studio-code - VSCode 中的 jupyter markdown 字体
- pandas - 根据另一列中的值替换列中的值
- c - 如何在 C 中比较两个二维数组?
- android - Retrofit android - 没有响应也没有错误
- java - 如何使用 lambda 编写 if 块?
- asp.net - ASP.NET Web 窗体将字符串下载为文件而不干扰初始请求
- debugging - pycharm docker-compose 调试
- c# - 领域驱动设计阅读模型能有基本逻辑吗?
- r - 以具有相似名称的列集为条件改变列集
- phoenix - 从 live_view 测试用例调用 LiveViewComponent 的 render_submit 时出现问题