Firebase 动态检索数据

Firebase retrieve data dynamically

问题

我正在尝试根据星期几显示来自我的 firebase 的数据。我的 firebase children 在 isoWeek 的日子里有 1,2,3,4,5,6,7 的标题,其值为随机词。我的问题是,如果是星期一,我如何只检索星期一的数据?代码如下

React 本机代码

 var MY VARIABLE = moment().isoWeekday(); //Friday is 5
 var items = [];
  snap.forEach((child) => {
   
    items.push({
      title: child.val().title,
      profile:child.val().profile,
      test:child.val().test,
      special:child.val().today, //,<---- I want this child.val().MY VARIABLE
      _key: child.key,
    });
  });'

Firebase

  "myWords" : {
    "words" : {
      "1" : "Tool box",
      "2" : "Ice Cream",
      "3" : "Lavender",
      "4" : "Speakers",
      "5" : "Pepsi",
      "6" : "Windows",
      "7" : "Linux",
    }
  }

所以比如说它的星期五,或者 5。我想用一个变量检索 child.val().5。这是可以实现的吗?谢谢!

是的,这绝对是可以实现的!

尝试:child.val()[variable]

在javascript中,我们可以使用点或括号访问对象的属性。例如,object.propertyobject["property"]

同样,在您的情况下,要使用变量访问 firebase 元素,您可以执行 child.val()[variable],其中变量是某个字符串或整数以访问 firebase 对象的 属性。也许 variable = 5 或 variable = '5'.

你只需要替换 child.val().today ---> child.val()[MY VARIABLE]

var MY_VARIABLE = moment().isoWeekday(); //Friday is 5
 var items = [];
  snap.forEach((child) => {

    items.push({
      title: child.val().title,
      profile:child.val().profile,
      test:child.val().test,
      special:child.val()[MY_VARIABLE],
      _key: child.key,
    });
  });

不幸的是,您将在此处纠结于 Firebase 客户端如何处理数组。

Firebase 客户端会将您的数据解释为数组并将其转换为:

"myWords" : {
  "words" : [
    null,
    "Tool box",
    "Ice Cream",
    "Lavender",
    "Speakers",
    "Pepsi",
    "Windows",
    "Linux",
  ]
}

所以它在数组的第一个位置插入一个空值。如果这对您的应用来说不是问题,那么您可以接受。

但对于许多应用程序来说,这个额外的项目是个问题。在这些情况下,我们建议您在数字前加上一些固定字符串,以确保 Firebase 不会执行其字符串解释:

"myWords" : {
  "words" : {
    "item1" : "Tool box",
    "item2" : "Ice Cream",
    "item3" : "Lavender",
    "item4" : "Speakers",
    "item5" : "Pepsi",
    "item6" : "Windows",
    "item7" : "Linux",
  }
}

有关 Firebase 如何处理数组的更多信息,请参阅此博客 post:https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html