Map 函数在 React JSX 中没有 return 项
Map function does not return items in React JSX
在我的 PlaylistsLinks 组件之外,我初始化了 folders
变量,然后我 运行 一个 Firebase 函数,它遍历所有文件夹名称并将其推送到 folders
数组。
我的 map 函数不会遍历我的 folders
数组,即使我可以 console.log 我的组件内的数组。为了使用 map
?
是否有特定的方法我必须将数组传递到功能组件中
import React, { useState, useEffect, useRef } from 'react';
import firebase from "firebase/app";
import storage from "firebase/storage";
import firebaseConfig from "../dropzone/config";
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}else {
firebase.app(); // if already initialized, use that one
}
let fb_storage = firebase.storage();
let storageRef = fb_storage.ref();
let rootRef = storageRef.root;
let folders = [];
rootRef.listAll().then(function(res) {
res.prefixes.forEach(function(folderRef) {
// console.log(folderRef.name)
folders.push(folderRef.name)
// All the prefixes under listRef.
// You may call listAll() recursively on them.
});
res.items.forEach(function(itemRef) {
// All the items under listRef.
// console.log(itemRef.name);
});
}).catch(function(error) {
// Uh-oh, an error occurred!
});
const PlayListLinks = () =>{
console.log(folders);
return(
<>
<ul>
{folders.map((folder, index) => {
return <li key={index}> {folder}</li>
})}
</ul>
</>
)
}
export default PlayListLinks
创建一个状态,然后用获取的文件夹列表更新它:
import React, { useState, useEffect, useRef } from 'react';
import firebase from "firebase/app";
import storage from "firebase/storage";
import firebaseConfig from "../dropzone/config";
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}else {
firebase.app(); // if already initialized, use that one
}
let fb_storage = firebase.storage();
let storageRef = fb_storage.ref();
let rootRef = storageRef.root;
const PlayListLinks = () =>{
const [folders, setFolders] = useState([])
useEffect(()=>{
rootRef.listAll().then(function(res) {
let temp = []
res.prefixes.forEach(function(folderRef) {
temp.push(folderRef.name)
});
setFolders(temp);
res.items.forEach(function(itemRef) {
// All the items under listRef.
// console.log(itemRef.name);
});
}).catch(function(error) {
// Uh-oh, an error occurred!
});
},[])
console.log(folders);
return(
<>
<ul>
{folders.map((folder, index) => {
return <li key={index}> {folder}</li>
})}
</ul>
</>
)
}
export default PlayListLinks
问题是你必须直接从 .map
中的函数 return 你的 JSX
像这样:
{folders.map((folder, index) => <li key={index}>{folder}</li>)}
或:
{folders.map((folder, index) => (
<li key={index}>{folder}</li>
)}
在我的 PlaylistsLinks 组件之外,我初始化了 folders
变量,然后我 运行 一个 Firebase 函数,它遍历所有文件夹名称并将其推送到 folders
数组。
我的 map 函数不会遍历我的 folders
数组,即使我可以 console.log 我的组件内的数组。为了使用 map
?
import React, { useState, useEffect, useRef } from 'react';
import firebase from "firebase/app";
import storage from "firebase/storage";
import firebaseConfig from "../dropzone/config";
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}else {
firebase.app(); // if already initialized, use that one
}
let fb_storage = firebase.storage();
let storageRef = fb_storage.ref();
let rootRef = storageRef.root;
let folders = [];
rootRef.listAll().then(function(res) {
res.prefixes.forEach(function(folderRef) {
// console.log(folderRef.name)
folders.push(folderRef.name)
// All the prefixes under listRef.
// You may call listAll() recursively on them.
});
res.items.forEach(function(itemRef) {
// All the items under listRef.
// console.log(itemRef.name);
});
}).catch(function(error) {
// Uh-oh, an error occurred!
});
const PlayListLinks = () =>{
console.log(folders);
return(
<>
<ul>
{folders.map((folder, index) => {
return <li key={index}> {folder}</li>
})}
</ul>
</>
)
}
export default PlayListLinks
创建一个状态,然后用获取的文件夹列表更新它:
import React, { useState, useEffect, useRef } from 'react';
import firebase from "firebase/app";
import storage from "firebase/storage";
import firebaseConfig from "../dropzone/config";
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}else {
firebase.app(); // if already initialized, use that one
}
let fb_storage = firebase.storage();
let storageRef = fb_storage.ref();
let rootRef = storageRef.root;
const PlayListLinks = () =>{
const [folders, setFolders] = useState([])
useEffect(()=>{
rootRef.listAll().then(function(res) {
let temp = []
res.prefixes.forEach(function(folderRef) {
temp.push(folderRef.name)
});
setFolders(temp);
res.items.forEach(function(itemRef) {
// All the items under listRef.
// console.log(itemRef.name);
});
}).catch(function(error) {
// Uh-oh, an error occurred!
});
},[])
console.log(folders);
return(
<>
<ul>
{folders.map((folder, index) => {
return <li key={index}> {folder}</li>
})}
</ul>
</>
)
}
export default PlayListLinks
问题是你必须直接从 .map
中的函数 return 你的 JSX像这样:
{folders.map((folder, index) => <li key={index}>{folder}</li>)}
或:
{folders.map((folder, index) => (
<li key={index}>{folder}</li>
)}