reactjs - 组件挂载时 useEffect 中的调度操作
问题描述
我编写了一个自定义钩子来使用 Redux 和 Redux thunk 调度 API 获取。if
如果我添加一个以检查我的状态是否包含数据,则该操作可以正常工作,并且我的钩子可以正常工作:
import { useCallback, useEffect } from 'react';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import { useParams } from 'react-router-dom';
import { getOrderInfo } from '../actions/ordersActions';
function useCheckOrderReduxState() {
const dispatch = useDispatch();
const { id } = useParams();
const { orderInfo } = useSelector((state) => state.order, shallowEqual);
const boundAction = useCallback(() => {
return dispatch(getOrderInfo(id));
}, [dispatch]);
useEffect(() => {
if (!orderInfo) {
boundAction();
}
}, [boundAction, orderInfo]);
}
export default useCheckOrderReduxState;
我的问题是,我只想getOrderInfo
在渲染具有钩子的页面时分派一次,每次渲染此页面时,即使我已经有数据在里面orderInfo
。
如果我if (!orderInfo)
从 中删除useEffect
,我会进入一个无限循环,因为每次状态更新时都会重新渲染组件,如果我保留它if
,如果orderInfo
.
每次渲染组件时我都需要更新状态,因为它可能具有过时的状态,并且我想从 API 获取最新状态。
我怎样才能做到这一点?
提前致谢!
解决方案
推荐阅读
- sql-server - (Spark 和)Databricks 中的下推查询不适用于更复杂的 sql 查询?
- ruby-on-rails - 运行 rails test 会创建两个新数据库 [已解决]
- python - win32api - ImportError: DLL load failed: 找不到指定的模块
- reactjs - 如何处理功能组件中的派生状态?
- git - Git LFS - 文件大小呈指数增长
- python - 测试 C 对象设置器/获取器
- amazon-web-services - Cloudwatch 事件未触发通过 CloudFormation 创建的 Lambda 函数
- sessionid - 会话管理:会话 ID 熵不足
- python - 如何知道 Python 子进程 Popen 并行运行的开始时间/结束时间
- google-api - 如何使用谷歌 API 为 1 小时购物提要生成刷新/访问令牌