【问题标题】:how to set value after map function runs in useEffectmap函数在useEffect中运行后如何设置值
【发布时间】:2021-01-23 10:51:14
【问题描述】:

这是真正的代码,我将 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", (snapshot, key) => {
                        // console.log('snapshot....', snapshot);
                        grabbedData1.push(snapshot.val());
                      });
                  });
                });
                if (grabbedData1) {
                  setOrders(grabbedData1);
                  console.log("setOrders", grabbedData1.length);
                }
              }
            });
        }
      });
  };

  useEffect(() => {
    GetdataUsers();
  }, []);

【问题讨论】:

  • getUserData() 不返回任何内容

标签: javascript reactjs firebase firebase-realtime-database array.prototype.map


【解决方案1】:

由于 Firebase,我无法重现代码和测试,但也许您可以尝试将“grabbedData1”的范围更改为更广泛的范围并从函数中返回。

可能的解决方案:

const GetdataUsers = async () => {
    let grabbedData = [];
    let grabbedData1 = [];
    ...
    ...
    return grabbedData1;
}

useEffect(() => {
    const data = GetdataUsers();
    if(data)
        setOrders(data);
}, []);

【讨论】:

  • 试图这样做,但我得到了 Promise { "_U": 0, "_V": 0, "_W": null, "_X": null, }
  • 你能把'return grabbedData1'改成'return Promise.resolve(grabbedData1)'吗?
猜你喜欢
  • 2020-11-22
  • 2022-11-03
  • 2021-05-16
  • 2021-08-24
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
相关资源
最近更新 更多