从Firebase存储获取图像并使用地图功能进行渲染

问题描述 投票:0回答:1

我当前在Firebase存储中有一个文件夹,看起来像这样:enter image description here

[我正在尝试通过一个Firestore集合进行映射,并渲染一个包含具有相应信息和图像的列表项的屏幕。我的文档字段包含ID(例如具有0和1),因此我有一种更简单的方法来查找Firebase存储文件夹中的图像。这是我用来渲染的代码:

renderAccordion() {
    return this.state.accordionarr.map((item,index) => {
      const url = this.returnurl(this.state.displaydatestringversion, item.id);
      return(
        <View key={index}>
          <Accordion
            onChange={this.onChange}
            activeSections={this.state.activeSections}
          >
            <Accordion.Panel header= {item.name}>
              <List>
              <List.Item>
                <Image
                source = {{ uri: url }}
                style = {styles.sizer}
                ></Image>
              </List.Item>
                <List.Item>{item.protein}</List.Item>
                <List.Item>{item.carbohydrate}</List.Item>
              </List>
            </Accordion.Panel>
          </Accordion>
        </View>
      );
    });
  }

在(item,index)中,您可以假定item的字段如下所示:enter image description here

此外,如果您检查第二行,则有一个方法调用returnurl。看起来像这样:

returnurl = async(date, id) => {
    var ref = firebase.storage().ref(date+'/'+id+".jpg");
    const url = await ref.getDownloadURL();
    return url;
  }

我目前收到错误消息,“ NSMutableDictionary类型的错误消息无法转换为有效的URL。我的代码有什么问题?还是有一种更有效的方式来映射字段并查找/下载图像URL以渲染屏幕?

javascript firebase react-native firebase-storage
1个回答
0
投票
您无法在渲染方法中调用async函数。如果需要在渲染中使用异步数据,则应在装入组件时(或有任何用于装入数据的输入可用时)开始装入该数据,然后在装入后将数据置于该组件的状态。

例如,请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.