Firebase 对数组做出本机反应

Posted

技术标签:

【中文标题】Firebase 对数组做出本机反应【英文标题】:Firebase with react native to array 【发布时间】:2021-09-05 06:07:10 【问题描述】:

我正在使用 Firebase 处理我的 React Native 项目的后端。我想从数据库中检索记录并从数组中呈现一个平面列表。我试图做一个数组,但是在函数之外,它又是空的......

这是我的代码:

  var brand_list = [] // the list
  //retrieve record from firebase database
  firebase.firestore().collection('Brand').get().then((querySnapshot) => 
    querySnapshot.forEach(snapshot => 
        let data = snapshot.data();
        brand_list.push(data);
    )
    console.log(brand_list) // contains the records
  )
  console.log(brand_list) // empty again

有什么可能的解决方法,这样我就可以很好地呈现我的平面列表了吗?

【问题讨论】:

函数外是空的,因为你正在使用异步代码;您在从 api 加载之前记录它。 【参考方案1】:

在 react-native 中你需要先使用 state 来初始化变量,然后使用 setState() 更新变量, setState() 函数告诉 react-native 更新 UI。如果数组在函数外部为空,则意味着您需要在此处使用 async-await,以确保您等待函数首先完成。 我想你试试这个:

constructor() 
    super();
    this.state =  dataFetched: [] ;
  

async fetchList()
await firebase.firestore().collection('Brand').get().then((querySnapshot) => 
    querySnapshot.forEach(snapshot => 
        let data = snapshot.data();
        this.setState((prevState)=>
dataFetched:[...prevState.dataFetched, data]
);
    )
    console.log(this.state.dataFetched); 
// now you can use this.state.dataFetched to update the flatList


【讨论】:

以上是关于Firebase 对数组做出本机反应的主要内容,如果未能解决你的问题,请参考以下文章

您如何使用面部 ID 登录以使用 Firebase 做出本机反应?

无法建立与 Firebase 版本不兼容的原因,并且相机反应本机

对console.log上显示的本机数据做出反应,但不在屏幕上

在本机反应中从数组上传数据到 Firebase 存储和 Firebase 数据库

无法读取undefined的属性'navigation' - 做出本机反应

对 Firebase 身份验证做出反应