如何通过 React JS 博览会正确从 Firebase 实时数据库获取随机节点

2024-03-26

跟进问题来自在控制台中记录变量时出现引用错误? https://stackoverflow.com/questions/75509803/referenceerror-when-the-variable-is-being-logged-in-console/75509988#75509988.

控制台日志:

当前代码:

import { StyleSheet, Text, View } from 'react-native'

import {db} from '../firebase'
import React, {useEffect, useState} from 'react'
import {ref, get, orderByKey, limitToFirst} from 'firebase/database'

const SubScreen2 = () => {
  
  
  const [randomNumber, setRandomNumber]= useState([])
  const [todoData, setToDoData] = useState([])
  
  
  useEffect (() => {
    var random = 0
    get(ref(db, "food/Total")).then(snapshot => {
      const count = snapshot.val();
      random = Math.floor((Math.random() * count));
      console.log(random)
      return get(ref(db, `food/`), orderByKey(), limitToFirst(random + 1))
    }).then(snapshot => {
      const randomKey = Object.keys(snapshot.val())[random];
      setToDoData(snapshot.val()[randomKey]);
      
    }).catch(error => {
      console.log(error);
    })
  }, [])
  console.log(todoData)
  return (
    <View style={styles.container}>
      {todoData ? (
        <View>
          <Text>{todoData.Description}</Text>
          <Text>{todoData.Location}</Text>
          <Text>{todoData.Halal}</Text>
          <Text>{todoData.OH}</Text>
        </View>
      ) : (
        <Text>Loading...</Text>
      )}
    </View>
  )
}

export default SubScreen2

我无法通过以下方式获得随机节点const randomKey = Object.keys(snapshot.val())[random] as snapshot.val()[random]给我未定义的。根据我能得到的随机值得到这个随机节点的正确方法是什么?

我的数据库的一部分:

{
  "food": {
    "Bakery": {
      "Bakery Cuisine": {
        "Description": "Within North Spine Plaza",
        "Halal": "Yes",
        "Location": "50 Nanyang Ave, #01-20 North Spine Plaza, Singapore 639798",
        "OH": "Mon - Sat : 8 AM to 7 PM, Sun Closed"
      }
    },
    "Beverage": {
      "Beverage": {
        "Description": "Within the South Spine food court",
        "Halal": "No",
        "Location": "21 Nanyang Link, Singapore 637371",
        "OH": "Mon - Fri: 7 30 am to 8 pm, Sat - Sun/PH Closed"
      },
      "Beverages": {
        "Description": "Within North Spine Koufu",
        "Halal": "No",
        "Location": "76 Nanyang Dr, #02-03 North Spine Plaza, Singapore 637331",
        "OH": "Mon - Fri : 7 am to 8 pm, Sat : 7 am to 3 pm, Sun Closed"
      },
      "Boost": {
        "Description": "Within North Spine Plaza",
        "Halal": "No",
        "Location": "50 Nanyang Ave, #01-11 North Spine Plaza, Singapore 639798",
        "OH": "Mon - Fri : 10 am to 9 pm, Sat - Sun: 10 am to 6 pm"
      },
      
    "Total": 120,

我需要节点名称及其下的值是描述、清真、俄亥俄州和地点

Update:使用提供的解决方案

我的控制台日志显示 4 个(描述、清真、位置和 OH)未定义

我当前的数据库:

Part of my database: enter image description here

{
  "Bakery": {
    "Bakery Cuisine": {
      "Description": "Within North Spine Plaza",
      "Halal": "Yes",
      "Latitude": 1.34714,
      "Location": "50 Nanyang Ave, #01-20 North Spine Plaza, Singapore 639798",
      "Longitude": 103.68066,
      "OH": "Mon - Sat : 8 AM to 7 PM, Sun Closed",
      "ShopNo": 1
    }
  },
  "Beverage": {
    "Beverage": {
      "Description": "Within the South Spine food court",
      "Halal": "No",
      "Latitude": 1.34253,
      "Location": "21 Nanyang Link, Singapore 637371",
      "Longitude": 103.68243,
      "OH": "Mon - Fri: 7 30 am to 8 pm, Sat - Sun/PH Closed",
      "ShopNo": 2
    },
    "Beverages": {
      "Description": "Within North Spine Koufu",
      "Halal": "No",
      "Latitude": 1.34708,
      "Location": "76 Nanyang Dr, #02-03 North Spine Plaza, Singapore 637331",
      "Longitude": 103.68002,
      "OH": "Mon - Fri : 7 am to 8 pm, Sat : 7 am to 3 pm, Sun Closed",
      "ShopNo": 3
    },
    "Boost": {
      "Description": "Within North Spine Plaza",
      "Halal": "No",
      "Latitude": 1.34735,
      "Location": "50 Nanyang Ave, #01-11 North Spine Plaza, Singapore 639798",
      "Longitude": 103.68036,
      "OH": "Mon - Fri : 10 am to 9 pm, Sat - Sun: 10 am to 6 pm",
      "ShopNo": 4
    },
"Total": 89,
}

要在React Native中从Firebase实时数据库获取随机节点,可以修改代码如下:

import { StyleSheet, Text, View } from 'react-native'

import {db} from '../firebase'
import React, {useEffect, useState} from 'react'
import {ref, get, orderByKey, limitToFirst} from 'firebase/database'

const SubScreen2 = () => {
  
  
  const [randomNumber, setRandomNumber]= useState([])
  const [todoData, setToDoData] = useState([])
  
  
  useEffect (() => {
    get(ref(db, "food/Total")).then(snapshot => {
      const count = snapshot.val();
      const random = Math.floor((Math.random() * count));
      console.log(random)
      return get(ref(db, `food/`), orderByKey(), limitToFirst(random + 1))
    }).then(snapshot => {
      const randomNode = snapshot.val()[Object.keys(snapshot.val())[0]];
      const { Description, Halal, Location, OH } = randomNode;
      setToDoData({ Description, Halal, Location, OH });
      
    }).catch(error => {
      console.log(error);
    })
  }, [])
  console.log(todoData)
  return (
    <View style={styles.container}>
      {todoData ? (
        <View>
          <Text>{todoData.Description}</Text>
          <Text>{todoData.Location}</Text>
          <Text>{todoData.Halal}</Text>
          <Text>{todoData.OH}</Text>
        </View>
      ) : (
        <Text>Loading...</Text>
      )}
    </View>
  )
}

export default SubScreen2

在这段代码中,我们首先获取下面的节点总数food节点。然后我们生成一个 0 到计数之间的随机数。我们用orderByKey() and limitToFirst()获取随机索引处的节点的方法。然后我们提取节点的属性并将它们设置在todoData状态变量。我们使用解构和属性名称来访问节点的属性。最后,我们在 JSX 中显示节点的属性。

好看!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 React JS 博览会正确从 Firebase 实时数据库获取随机节点 的相关文章

随机推荐

  • 用 jQuery 动态替换 img src 属性

    我正在尝试使用 jQuery 替换给定源的 img 源 例如 当图像源为 smith gif 时 替换为 johnson gif 如果 williams gif 替换为 Brown gif 等 编辑 图像是从 XML 中按随机顺序检索的 每
  • Kotlin 喜欢 Javascript 中的作用域函数(let、also、apply、run)吗?

    是否可以在 Javascript Typescript 中创建类似 Kotlin 的作用域函数 有没有图书馆可以做到这一点 参考 https kotlinlang org docs reference scope functions htm
  • 在 iframe 中访问 TinyMCE 当前输入

    我正在使用 TinyMCE 并且尝试将用户当前输入的内容输出到 TinyMCE 编辑器下方的 div 中 我希望用户看到帖子的渲染效果如何 我正在使用的脚本是这样的 我已将相应的 div 放置在视图中的开始表单中 div div 然而 当我
  • sIFR 还是 FLIR?

    我最近遇到了面部提升术 这是 sIFR 的替代方案 我想知道那些同时拥有 sIFR 和 FLIR 经验的人是否可以介绍一下他们使用 FLIR 的经验 对于那些还没有了解 FLIR 工作原理的人来说 FLIR 的工作原理是使用 JavaScr
  • 不同的交易必须保证选择不同的项目;避免争论

    作为注册新用户的一部分 我们从预编译列表 表 中为它们分配资源 在本例中为 Solr 核心 如果 5 个用户注册 则必须为他们分配 5 个不同的核心 如果用户成功注册 分配即为最终分配 请参阅下面的描述 但在现实世界中 同时注册新用户竞争同
  • 如何在表单提交时打开新窗口

    我有一个提交表单 并希望它在用户提交表单时打开一个新窗口 以便我可以在分析中跟踪它 这是我正在使用的代码
  • QWidgets可以添加到QWindow中吗?

    现在推荐使用QWindow进行OpenGL绘图 是否可以向此窗口添加小部件 如果是这样 怎么办 如果没有 我应该如何使用 Qt5 将小部件添加到 OpenGL 程序中 应用程序通常会使用QWidget or QQuickView对于它的 U
  • Laravel Auth::user() 关系

    我试图通过 Auth user 函数获取我的用户角色关系 我以前曾这样做过 但由于某种原因它不起作用 Auth user gt role 这将返回尝试从非对象获取属性的错误 在我的用户模型中我有这个 public function role
  • Flask-SQLAlchemy 和 Flask-Restless 不获取孙子

    Problem 我正在 Flask Flask SQLAlchemy 和 Flask Restless 上构建一个应用程序 我使用 Restless 生成了一个用于父子孙关系的 API 我的孩子上的 GET 将正确获取孙子 但父母上的 GE
  • 如何减少部署时的 Docker 映像大小?

    所以我刚刚创建了一个非常基本的 Node 应用程序 我想练习将其放入docker容器中并部署到另一台服务器上 我正在使用这里的步骤 https nodejs org en docs guides nodejs docker webapp h
  • 跳过 FlatFileParseException 或 Spring Batch 中的特定异常

    您好 我需要读取 n 个 平面文件 在文件读取期间 如果从读取器收到 FileParseException 则停止当前文件读取并安全退出并处理下一个文件并继续作业执行 目前我有这个 xml 配置 但我不想这样做 因为我没有真正的跳过限制计数
  • 春云|假装 Hytrix |首次调用超时

    我有一项服务使用了 3 个假客户端 每次启动应用程序时 我都会在第一次调用任何假客户端时收到 TimeoutException 在一切稳定之前 我必须至少触发每个假客户端一次 在网上查了一下 问题是 feign 或 hystrix 内部的某
  • 通过隧道颠覆

    对于工作 我在一个封闭的网络中工作 我们设置了一些只能从我们的网络内部访问的 IP 地址 不过 有一个盒子 我们可以通过 SSH 进入并通过隧道到达我们各自的开发者盒子 我知道我可以通过使用以下方式从我们的开发者盒子获得流量 Lssh 的参
  • 找到 3x3 打孔的所有组合

    我参加了一个嘉年华 在每个地点 他们都会用特殊的打孔器标记您的节目 打孔器是一个 3x3 空间的网格 在每个空间中 要么有一根大头针刺破你的纸 要么没有 这让我想知道你可以用这个工具制作多少种不同的图案 我的第一个想法是 2 9 512 但
  • 在 pypy 中调用 python 文件

    我最近搬到了 PyPy 它的速度快得惊人 但是很多 python 库还没有实现 所以我有很多自制的 python 函数 我想在 PyPy 代码中调用它们 这是我的问题 有没有办法在 PyPy 中调用 python 文件或函数 并向其传递一些
  • 带有 Entity Framework 4 指南的多语言数据库

    我们正在创建一个大型电子商务数据库 需要支持多种语言的数据 例如 产品表将需要名称 描述 元标题 元关键字 元描述等的一项或多项翻译 从关系数据库设计的角度来看 有多种方法可以实现这一点 但 Entity Framework 4 添加了一些
  • 在 Android 中使用拨号盘启动应用程序

    我想通过拨号盘启动我的应用程序 我使用以下代码 用于拨号盘启动应用程序 在广播接收器中 public class HiddenReceiver extends BroadcastReceiver Override public void o
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

    我正在尝试将 hibernate orm 映射工具配置到我的 java 类 并使用 PostgreSQL 作为我的数据库 并将密码配置为 password 当我尝试运行该应用程序时 我在控制台日志中遇到错误 如下所示无法创建请求的服务 or
  • 社交网站的数据库设计

    社交网站 例如 Twitter 中会出现哪些表格 到目前为止我有一个用户表 如何跟踪关注者和我关注的人 我应该为关注者和我关注的人维护一个单独的表吗 这些表中会有哪些列 请不要认为这是主观 偏离主题的 由于我是初学者 我想专家可以指导我获得
  • 如何通过 React JS 博览会正确从 Firebase 实时数据库获取随机节点

    跟进问题来自在控制台中记录变量时出现引用错误 https stackoverflow com questions 75509803 referenceerror when the variable is being logged in co