reactjs - 有没有办法在反应功能组件中只进行一次 api 调用?
问题描述
对不起,如果这是一个初学者的问题>
我正在尝试使用功能组件,因为我一直在做类组件。
我有一个简单的组件,它应该从服务器加载列表并显示它。
该组件看起来像这样(如果有类型,我简化了一点很抱歉):
const ItemRelationsList = (props: ItemRelationsListProps): JSX.Element => {
const [getList, setList] = useState([]);
const loadRelation = (): void => {
HttpService.GetAsync<getListRequest, getListResponse>('getList',{
// params
}).subscribe(res => {
setList(res.data.list);
});
}
loadRelation();
return (
<>
<Table
columns={columns}
dataSource={getList}
>
</Table>
</>
)
}
我面临的问题是每次使用 setList 时,都会重绘组件,因此重新执行 http 调用。
除了使用类组件之外,还有其他方法可以防止这种情况吗?
解决方案
如果你想运行一个效果并且只清理一次(在挂载和卸载时),你可以传递一个空数组([])作为第二个参数。这告诉 React 你的效果不依赖于任何来自 props 或 state 的值,所以它永远不需要重新运行。这不是作为特殊情况处理的——它直接遵循依赖项数组的工作方式。
const ItemRelationsList = (props: ItemRelationsListProps): JSX.Element => {
const [getList, setList] = useState([]);
// componentDidMount
useEffect(() => {
loadRelation()
}, [])
const loadRelation = (): void => {
HttpService.GetAsync<getListRequest, getListResponse>('getList',{
// params
}).subscribe(res => {
setList(res.data.list);
});
}
return (
<>
<Table
columns={columns}
dataSource={getList}
>
</Table>
</>
)
}
推荐阅读
- python - 对大查询表的 API 请求
- javascript - $.post 中的 jQuery“错误请求 400”
- angular - 停止点击不起作用Angular 2的指令
- javascript - Ionic 3 Angular Fire payload.val() 返回 null
- php - 为什么与注册相关的注册类型信息显示不正确?
- javascript - 当我没有(明确)指定在 Vue.js 中导入索引文件时,为什么会出现错误?
- python - 熊猫枢轴并加入两个数据框
- powershell - 限制每台计算机的 powershell 作业
- ios - 使用 Instagram 新图形 API 在 iOS 应用程序中登录 Instagram
- laravel - PRedis/Laravel 无法在启动时解析主机 - [tcp://:6379]