如何解决如何在useEffect中运行map函数后设置值
这是真正的代码,我将 setOrder 设置为空,由于无限渲染,我正在尝试远离地图循环,如何将grabbedData1 值传递给 setOrder。我知道 setOrder 在 .map 运行之前获得价值。我什至试图在另一个函数中“customerList1”.map,但我得到无限渲染错误
const GetdataUsers = async () => {
let grabbedData = [];
console.log("setUserdata....",grabbedData.length);
await firebase
.database()
.ref(`/users/${user1.uid}`)
.orderByKey()
.on("value",(snapshot,key) => {
// console.log("snapshot....",snapshot);
grabbedData.push(snapshot.val());
setUserdata(grabbedData);
console.log("setUserdata",grabbedData.length);
if (grabbedData) {
let customerList1 = [];
firebase
.database()
.ref(`/serviceProvider/${user1.uid}/franchise/customers`)
.orderByKey()
.on("value",(snapshot) => {
customerList1.push(snapshot.val());
setCustomerList(customerList1);
console.log("setCustomerList",customerList1);
if (customerList1) {
let grabbedData1 = [];
Object.keys(customerList1).map(function (key) {
let y = customerList1[key];
return Object.keys(y).map(function (key2) {
let x = y[key2];
console.log("xxxxxxxxx",x);
firebase
.database()
.ref(`/orders/${x}`)
.orderByKey()
.on("value",key) => {
// console.log('snapshot....',snapshot);
grabbedData1.push(snapshot.val());
});
});
});
if (grabbedData1) {
setOrders(grabbedData1);
console.log("setOrders",grabbedData1.length);
}
}
});
}
});
};
useEffect(() => {
GetdataUsers();
},[]);
解决方法
由于 Firebase,我无法重现代码和测试,但也许您可以尝试将“grabbedData1”的范围更改为更大的范围并从函数中返回它。
可能的解决方案:
const GetdataUsers = async () => {
let grabbedData = [];
let grabbedData1 = [];
...
...
return grabbedData1;
}
useEffect(() => {
const data = GetdataUsers();
if(data)
setOrders(data);
},[]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。