首页 > 解决方案 > 在 React Native 中从 Fire 库中读取特定值

问题描述

尝试执行类似 SELECT 的查询来检索数据,但使用 Firebase 和 React Native。

我的 Firebase 数据库中有以下结构:

{
  "items" : {
    "1234" : {
      "value1" : 420,
      "value2" : 69,
      "ProductID" : 1234
    },
    "5678" : {
      "value1" : 250,
      "value2" : 12,
      "ProductID" : 5678
    },
    "91011" : {
      "value1" : 9001,
      "value2" : 5,
      "ProductID" : 91011
    }
  }
}

我正在使用以下代码尝试检索特定的产品 ID

firebaseDB.ref("/items/")
    .orderByChild("ProductID")
    .equalTo(data)
    .once("value", snapshot => {
        if (snapshot.exists()){
            const userData = snapshot.val();
            console.log("INFO ::: Exists!", userData);
        }
        else {
            console.log("INFO ::: No match!!!");
        }

现在我的问题是我似乎无法选择数据。我认为这是我的查询的问题,因为我传递了 ID 1234 并且找不到此产品 ID。

        .equalTo(data) <---- is how I'm passing the product id

这是我的日志中打印的内容:

[11:43:19] [FIREBASE] p:0: Listen called for /items{"ep":"1234","i":"ProductID","sp":"1234"}
[11:43:19] [FIREBASE] p:0: Listen on /itemsfor {"ep":"1234","i":"ProductID","sp":"1234"}
[11:43:19] [FIREBASE] p:0: {"r":2,"a":"q","b":{"p":"/items","q":{"sp":"1234","ep":"1234","i":"ProductID"},"t":1,"h":""}}
[11:43:19] [FIREBASE] p:0: handleServerMessage d {"p":"items","d":{"1234":{"value1":420,"value2":69,"ProductID":1234},"5678":{"value1":250,"value2":12,"ProductID":5678},"91011":{"value1":9001,"value2":5,"ProductID":91011}}}
[11:43:19] [FIREBASE] event: /items:value:null
[11:43:19] [FIREBASE] p:0: Unlisten called for /items {"ep":"1234","i":"ProductID","sp":"1234"}
[11:43:19] [FIREBASE] p:0: Unlisten on /items for {"ep":"1234","i":"ProductID","sp":"1234"}

也许我应该尝试修改调用 .once 时传递的“值”,但我不确定....有什么想法吗?

谢谢

已解决的问题:

Mohammed 给出了一个很好的解决方案,它确实允许检索数据。我还忽略了我正在使用字符串来查询我的数据,而我正在寻找的数据是一个数字。

标签: react-nativereact-navigation

解决方案


你可以试试这个

const data = 1234;
firebase
  .database()
  .ref()
  .child('items')
  .orderByChild('ProductID')
  .equalTo(data)
  .once('value')
  .then(snapShot => {
    let matchingProducts = [];
    snapShot.forEach(child => {
      matchingProducts = [child.val(), ...matchingProducts];
    });
    console.log("matchingProducts",matchingProducts);
    return matchingProducts;
  });


推荐阅读