【问题标题】:fetch data from firebase without getting uid key in React Native从 Firebase 获取数据而不在 React Native 中获取 uid 键
【发布时间】:2020-04-14 12:41:26
【问题描述】:

我想从 firebase 数据库中获取所有数据,但我不想显示 UID 键,从这段代码中我可以获取数据,但它显示的是 uid。如果可能的话,我只想显示所有数据

  useEffect(() => {
    var recentPostsRef = firebase.database().ref('/users');
    recentPostsRef.once('value').then((snapshot) => {
      // snapshot.val() is the dictionary with all your keys/values from the '/store' path
      console.log(snapshot.val());
    });
  }, []);

我可以通过以下方式输出这些数据吗?

    {
      avatar: 'pin-1.png',
      firstname: 'Mahir',
      lastname: 'Asrani',
      latitude: 28.660918,
      longitude: 77.274468,
    },
    {
      avatar: 'pin-1.png',
      firstname: 'name',
      lastname: 'name',
      latitude: 00.00066,
      longitude: 00.275550,
    },

【问题讨论】:

    标签: reactjs firebase react-native firebase-realtime-database


    【解决方案1】:

    如果你想要一个值的数组,你可以使用forEach 操作符来提取所有的值并将它们放入一个数组中:

    recentPostsRef.once('value').then((snapshot) => {
      let values = [];
      snapshot.forEach((child) => {
        values.push(child.val());
      });
      console.log(values);
    });
    

    两个音符:

    • 您仍在从此处的数据库中读取它们的键,只是不再显示它们。如果这是你想要的,那当然很好。只是想确保您知道客户端仍然从数据库中读取密钥。

    • 应用程序稍后需要密钥是很常见的,例如识别一组特定的值,或更新数据库中的特定节点。您可能需要稍后返回此代码并重新访问它以保留密钥。保留键和值但将它们分开保存的简单方法是:

      recentPostsRef.once('value').then((snapshot) => {
        let keys = [],
            values = [];
        snapshot.forEach((child) => {
          key.push(child.key);
          values.push(child.val());
        });
        console.log(keys, values);
        // or: setState({ keys: keys, values: values });
      });
      

    【讨论】:

      【解决方案2】:

      您可以使用forEach进行迭代以检索users下的所有数据:

        useEffect(() => {
          var recentPostsRef = firebase.database().ref('/users');
          recentPostsRef.once('value').then((snapshot) => {
            snapshot.forEach((childSnap) => {
            console.log(childSnap.val());
           });
          });
        }, []);
      

      这将检索ids下的所有数据,但如果你这样做let uid = childSnap.key,你仍然可以访问id

      【讨论】:

      • 好的,但我想将我的所有数据存储在一个状态中,这样我就可以轻松访问它。我做了这个状态 const [data, setdata] = useState();
      • 为什么不能在状态中存储childSnap.val()
      • 我只是通过制作一个数组来做到这一点 :) 谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 2020-09-21
      相关资源
      最近更新 更多