javascript - 使用 API 获取数据获取请求复制响应结果数据
问题描述
我正在向后端请求从数据库中获取数据,我正在做类似的事情:
const loadData = async () => {
const response = await fetch(URL);
const data = await response.json();
setOrdersData(data.data);
};
useEffect(() => {
loadData();
console.log(OrdersData)
}, []);
当我console.log(OrdersData)
6console.log
次渲染数据时,它也渲染了 6 次,我还尝试将依赖项设置useEffect
如下:
const loadData = async () => {
const response = await fetch(URL);
const data = await response.json();
setOrdersData(data.data);
};
useEffect(() => {
loadData();
setLoading(false)
console.log(OrdersData)
}, [loading]);
但是,OrdersData
即使响应结果只有一个对象,当我渲染它 6 次时,我仍然无法弄清楚如何不复制数据。
解决方案
为了防止不必要的渲染,请尝试在 loadData 中使用 useCallback 钩子,如下所示:
const loadData = useCallback(async () => {
try {
const response = await fetch(URL);
const data = await response.json();
setOrdersData(data.data);
} catch (err) {
//do something
}
}, [])
记住要导入为钩子,并根据需要使用依赖项,如 useEffect 或 useMemo。希望它有效,还记得用 return 语句卸载 useEffect 中的副作用
推荐阅读
- sql-server - 我想提取 SQl Server 服务详细信息和 SSRS、SSAS、SSIS
- pagination - Cakephp3 / PHP72 Paginator, Parameter 必须是数组或实现 Countable 的对象
- jquery - 具有超长资源的完整日历调度程序
- php - 关于使用 argon2i 散列密码
- dictionary - 按确定对象的总和进行流分组
- android - 清单文件中少数活动的红色下划线
- spring-mvc - 如何在直接写入响应时进行 GZIP 压缩
- swift - Swift:从 [Int: UIView]() 访问 UIView 子项
- angularjs - 显示加载器,直到视图被加载(AngularJS)
- python - 如何使用python在字符串之间添加连字符