reactjs - Redux 不断更新
问题描述
我正在使用 expo 构建一个带有 React Native 的应用程序,并且我实现了 Redux。现在在我的组件中,我需要从 API 中获取一些东西来填充列表。我决定使用 useEffect 挂钩来实现这一点。现在在我的 useEffect 钩子的依赖数组中,我放置了我的 Redux 状态列表。像这样:
const onFetchOrders = async (query: string, offset: number, limit?: number, filter?: {}) => {
await props.fetchOrders('', 0);
}
useEffect(() => {
setIsLoading(true);
onFetchOrders('', 0);
if (props.orders.length > 0) {
setOrders(props.orders)
} else {
setIsLoading(true);
}
}, [props.orders])
订单被映射到另一个组件中的道具:
const mapState = (state : RootState) => ({
orders: state.orders.items,
debtor: state.debtor.debtor,
totalCount: state.orders.totalCount
})
const mapDispatch = (dispatch: any) => {
return {
fetchOrders: (query?: string, offset?: number, limit?: number, filters?: {}) => dispatch(tFetchOrders(query, offset, limit, filters)),
fetchDebtor: (uuid: string) => dispatch(thunkFetchDebtor(uuid)),
fetchCredentials: () => dispatch(thunkFetchCredentials()),
};
}
//const connector = connect(mapState, mapDispatch)(Root);
export const connector = connect(mapState, mapDispatch);
export type OrdersProps = ConnectedProps<typeof connector> & OrderStackNavProps<"Orders">;
现在,如果我启动应用程序,我的 useEffect 挂钩会不断重新渲染,因为订单数组中似乎有更新。
解决方案
您编写useEffect
钩子的方式将在每次props.orders
更改时运行,因为您将该数组中的道具作为可选参数传递。您可以在此处阅读有关useEffect
ReactJS 文档的工作原理的更多信息。
如果你希望你的useEffect
钩子在组件渲染时只运行一次,你应该传递一个空数组:
useEffect(() => {
setIsLoading(true);
onFetchOrders('', 0);
}, []);
一旦你开始你的获取,你可以将订单添加到另一个useEffect
钩子中的道具:
useEffect(() => {
if (props.orders.length > 0) {
setIsLoading(false);
setOrders(props.orders)
} else {
setIsLoading(true);
}
}, [props.orders])
推荐阅读
- android - 分页3调用adapter.refresh首先调用第2页
- php - Woocommerce:将库存状态添加到变体下拉选择器(必须不仅适用于 WC 生成的选择器)
- python - ImportError:即使使用 __init__.py 也尝试在没有已知父包的情况下进行相对导入
- javascript - 使用 Quasar js 在 Electron js 中未定义 fs 函数的 copyFile
- phpstorm - PhpStorm:此文件不属于该项目
- android - 颤振错误:异常:Gradle 任务 assembleDebug 失败,退出代码为 1
- bash - 如何通过 bash 脚本知道任何网站的 IP 地址?
- python - 使用 Python 中的 matplotlib 对 csv 文件中混合百分比变化的 y 轴进行排序
- c++ - RcppEigen 函数使用 sourceCpp 非常快,但编译为包时非常慢
- javascript - 本地存储:它在移动设备上的表现如何?使用安全吗?有哪些陷阱?需要使用过它的开发者的建议