reactjs - 异步函数不等待返回的数据将操作分派给减速器
问题描述
当我的程序应该只分派一个时,我的程序正在分派两个动作到我的减速器。我正在使用异步功能,但我认为它不能正常工作。
我的控制台日志打印了这个:
这是我的代码:
useEffect(() => {
try {
if (user) {
const params = new URLSearchParams(window.location.search);
const pid = params.get("pid");
console.log(pid);
async function fetchData() {
const docRef = db
.collection("users")
.doc(user?.uid)
.collection("products")
.doc(`${pid}`);
const data = await docRef.get().then(function (doc) {
setName(doc.data().name);
setPrice(doc.data().price);
setDescription(doc.data().description);
setQuantity(doc.data().quantity);
setDownloaded(true);
dispatch({
type: "SET_EDIT_PRODUCTS",
item: {
name: name,
},
});
});
}
fetchData();
}
} catch (error) {}
},);
解决方案
您对 useEffect 有依赖关系,这意味着每当name
变量更改时,都会触发效果挂钩。在您的控制台数据中,似乎首先 name 变量是一个空字符串,然后它有一个值。
推荐阅读
- xml - 使用应用模板时如何确保每行显示 5 个单元格
- c# - 为什么 MVC 总是使用 [HttpPost] 方法?
- spring - 多对多关系的 Redis 数据建模
- c++ - 高效读取字符位置
- javascript - WebRTC 视频未显示
- vue.js - vue-scrollto 不在移动设备上排队 - 仅移动设备的偏移量?
- algorithm - 为这个修改过的快速排序写一个递归关系?
- javascript - 使用 javascript 访问 nativescript 磁力计数据
- java - 链表排序插入
- java - 使用 StepExecutionContext/JobExecutionContext 与大值共享 Hashmap 的后果