reactjs - react native如何在Firebase实时数据库中生成子节点

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

我正在将一些数据上传到 React Native firebase 数据库中。我必须使用单独的节点在其中添加一个数据数组。我不明白如何执行它。这是我的代码...

firebase.database().ref('Shops/' + firebase.auth().currentUser.uid).push({
  UserName: this.state.Uname,
  name:this.state.Name,
  tagline:this.state.TagLine,
  description:this.state.Description,
  number:this.state.number,
  image_url_logo:this.state.base64_datalogo,
  image_url_banner:this.state.base64_data,

}) 

我想在其中生成另一个名为products 的节点。它是一个数组。 只是想知道如何在这个结构中生成带有子节点的数组,请指导。

enter image description here

这是我真正想要的。

最佳答案

对于这个用例,就像将数组嵌套在您推送到服务器的数据下一样简单。

firebase.database().ref('Shops/' + firebase.auth().currentUser.uid).push({
  UserName: this.state.Uname,
  name:this.state.Name,
  tagline:this.state.TagLine,
  description:this.state.Description,
  number:this.state.number,
  image_url_logo:this.state.base64_datalogo,
  image_url_banner:this.state.base64_data,
  products: [
    {
      name: 'rubber duck',
      price: '5',
      ...
    },
    {
      name: 'kitchen sink',
      price: '200',
      ...
    }
  ]
})

但是,当您希望在一个页面上列出所有商店时,就会出现问题。如果您想获取每家商店的名称、标语、描述、联系电话和图片,即使您不使用商店销售的每件商品,您也必须下载该数据。

而是考虑将商店的产品拆分到一个单独的数据库位置。

let shopRef = firebase.database().ref('Shops/' + firebase.auth().currentUser.uid).push();
let shopId = shopRef.key; // unique shop ID

let setShopDataPromise = shopRef.set({
  UserName: this.state.Uname,
  name:this.state.Name,
  tagline:this.state.TagLine,
  description:this.state.Description,
  number:this.state.number,
  image_url_logo:this.state.base64_datalogo,
  image_url_banner:this.state.base64_data,
});

let setShopItemsPromise = firebase.database().ref('ShopItems/' + firebase.auth().currentUser.uid + '/' + shopId).set([
    {
      name: 'rubber duck',
      price: '5',
      ...
    },
    {
      name: 'kitchen sink',
      price: '200',
      ...
    }
]);

Promise.all([setShopDataPromise, setShopItemsPromise])
  .then(() => {
    console.log('Shop uploaded successfully');
  })
  .catch((err) => {
    // something went wrong
    console.error(err);
  });

现在数组是 best avoided in Realtime Databases ,我会通过以下函数运行您的 products 数组,然后再将它们传递给 set 以给每个项目它是 own unique product ID .产品仍将按相同的顺序上传,但会更容易管理。

function arrayToKeyPairs(arr) {
  let rootRef = firebase.database().ref();
  let newKey = () => rootRef.push().key;
  return arr.reduce((acc, v) => {
    acc[newKey()] = v
    return acc;
  }, {});
}

关于reactjs - react native如何在Firebase实时数据库中生成子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59014897/

相关文章:

reactjs - 如何更改 Material ui中的默认颜色

android - 将图像从 android 上传到 Firebase 后如何获取图像 URL?

ios - 在不同 CollectionViewCell 之间传递数据

react-native - Jest 模拟和监视导入的异步函数

android - 为具有新比率的手机优化 android 应用程序,如 S8 (18.5 :9)?

node.js - 如何在中心生成 QR 码和图像?

javascript - react 映射函数未返回的无状态组件

javascript - 递归 `setTimeout` 未按预期方式进行

android - 如果不使用 Charles + SSL 隧道,React Native 应用程序无法访问 Android 上的后端 API

angularjs - 使用 AngularFire,是否可以创建关系式数据库?或者访问 UniqueIDs?