【发布时间】:2021-11-29 16:04:02
【问题描述】:
我正在制作一个 facebook 克隆,在我的主页 Feed 上,我想显示所有帖子,此代码显示帖子但不按顺序显示,想首先显示最新帖子。
但现在这显示(旧帖子(已加载)按降序显示,然后所有新帖子按正确顺序显示)
homeFeed.js
import React ,{useState,useEffect} from 'react'
import './stylesheets/HomeFeed.css';
import HomeReels from './HomeReels'
import CreatePost from './CreatePost';
import Post from './Post';
import { ref, onValue} from "firebase/database";
import { realtimedb } from '../firebaseConfiguration';
export default function HomeFeed() {
const [postdata, setpostdata] = useState([])
const starCountRef = ref(realtimedb, 'Posts/');
// get post from realtime database
useEffect(()=>{
onValue(starCountRef, async (snapshot) => {
const data = snapshot.val();
var captions=[];
//data is stored in raltime db firebase as ----> Post > uid > timestamp >{caption:"captions"}
// conver objects to array , to store strings in final array data structure is in realtimedb > post > {uid:{time:{caption:"caption}}}
(Object.values(data)).forEach((e)=>{
(Object.values(e)).forEach((p)=>{
captions.unshift(p.caption)
})
});
setpostdata(captions)
});
},[])
// make Post components
const postRender = postdata.map((e)=>{
return<>
<Post caption={e}/>
</>
})
return (
<div className='HomeFeed'>
<HomeReels />
<CreatePost />
{postRender}
</div>
)
}
post.js
使用标题作为发布数据并将其作为道具接收
【问题讨论】:
-
错误是什么
-
添加一些状态变量以确保加载过程完成。之后挂载你的组件
标签: javascript reactjs firebase-realtime-database