【问题标题】:How to access nested Firebase Object item with React如何使用 React 访问嵌套的 Firebase 对象项
【发布时间】:2021-07-07 02:18:34
【问题描述】:

我正在尝试从承诺的结果中获取文件的名称。到目前为止,我可以获得实际的文件 url 并将其显示为音频文件,但我不确定如何获取文件的名称。在 ul 元素中显示 Object 时,我只能从 Object 中显示 0 或 1。

const fileNames =  () =>{
        let temp = [];
        rootRef.listAll().then( function(res) {
            
            let promises = res.items.map(item => item.getDownloadURL());

            Promise.all(promises).then((downloadURLs)=>{
                        
                    // console.log(downloadURLs)
                    console.log(res.items)
                    setFiles(res.items)
                    setUrls(downloadURLs)
                    
                })
            //  console.log('dsds' + files[0]['name'])
            }).catch(function(error) {
            // Uh-oh, an error occurred!
        });
            
    
    }

 return (
        <>
            <div>hello {folder}</div>

            <ul>
                {Object.keys(files).map((file, index) => {
                    console.log(file)
                    return <li key={index}> {file}</li>
                })}
            </ul>

            <div>
                {urls.map((url, index) => {
                  
                   return <audio controls key={index} src={url}> {url} </audio>
                })}
                
            </div>

        </>
    )

这是返回对象的控制台日志。如您所见,我试图获取一个name 参数,文件名是teabeat.mp3。还可以看到Object数组的开头是0,只是被显示了。

这里是完整的代码:


import React, { useState, useEffect, useRef } from 'react';
import firebase from "firebase/app";
import storage from "firebase/storage";
import  firebaseConfig from "../dropzone/config";

import {
    BrowserRouter as Router,
    Switch,
    Route,
    Link,
    useRouteMatch,
    BrowserRouter,
    useParams
  } from "react-router-dom";


if (!firebase.apps.length) {
    firebase.initializeApp(firebaseConfig);

}else {
    firebase.app(); // if already initialized, use that one
}

  // router is getting the current path name


const FolderPage = () => {

    let {folder} = useParams();

    let fb_storage = firebase.storage();
    let storageRef = fb_storage.ref();  
    
    let rootRef = storageRef.child(folder);

    
    
    
    // console.log(rootRef);

    const [files, setFiles] = useState({}); 
    const [urls, setUrls] = useState([]);   


    // Find all the prefixes and items.
   

        
    const fileNames =  () =>{
        let temp = [];
        rootRef.listAll().then( function(res) {
            
            let promises = res.items.map(item => item.getDownloadURL());

            Promise.all(promises).then((downloadURLs)=>{
                        
                    // console.log(downloadURLs)
                    console.log(res.items)
                    setFiles(res.items)
                    setUrls(downloadURLs)
                    
                })
            //  console.log('dsds' + files[0]['name'])
            }).catch(function(error) {
            // Uh-oh, an error occurred!
        });
            
    
    }

    useEffect(()=>{
        fileNames();
    },[])

    


    return (
        <>
            <div>hello {folder}</div>
          

            <ul>
                {Object.keys(files).map((file, index) => {
                    console.log(file.name)
                    return <li key={index}> {file.name}</li>
                })}
            </ul>

            <div>
                {urls.map((url, index) => {
                  
                   return <audio controls key={index} src={url}> {url} </audio>
                })}
                
            </div>

        </>
    )
}

export default FolderPage

【问题讨论】:

    标签: javascript json reactjs firebase firebase-storage


    【解决方案1】:

    据我所知,查看存储文档中的object format,您应该能够获得每个对象的name 属性。所以:

    <li key={index}>{file.name}</li>
    

    【讨论】:

    • 当我尝试它以未定义的形式返回时,html 中没有显示任何内容。如果有帮助,我添加了完整的代码。
    • 哇。我只是通过将对象键映射更改为常规映射并将状态也设为数组来修复它。非常感谢!
    • 啊,我错过了Object.keys()。这确实不需要,因为您的 files 是一个数组。很高兴听到你成功了?
    猜你喜欢
    • 2015-08-31
    • 1970-01-01
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2022-11-02
    相关资源
    最近更新 更多