AsyncAwait在第一次调用时无法在NextJS/ReactFirebase/Firestore上工作
创始人
2024-09-21 02:30:14
0

这个问题通常出现在使用firebase / firestore API进行数据获取的情况下。root cause在于初次加载进入页面时,服务端渲染 (SSR) 使我们的getInitialProps在服务端被调用从而导致我们的异步代码不会执行。因此我们需要在客户端的componentDidMount周期内进行,判断当前页面是在客户端还是服务端,并进行处理在客户端初次渲染时再次拉取数据,而不是仅限服务端。

例如:

import { firebase } from "../lib/firebase";

function HomePage(props) { return (

Home Page
) }

HomePage.getInitialProps = async ({ req }) => { // 如果在服务端,请等待数据完成加载 if (req) { // Create a reference to the cities collection const citiesRef = firebase.firestore.collection('cities'); const snapshot = await citiesRef.get(); const data = snapshot.docs.map((doc) => ({ id: doc.id, ...doc.data })); return { cities: data }; }

return { cities: [] }; };

class HomePageContainer extends React.Component { state = { cities: this.props.cities };

async componentDidMount() { // 如果在客户端,并且没有数据,请等待数据完成加载 if (!this.state.cities.length) { // Create a reference to the cities collection const citiesRef = firebase.firestore.collection('cities'); const snapshot = await citiesRef.get(); const data = snapshot.docs.map((doc) => ({ id: doc.id, ...doc.data })); this.setState({ cities: data }); } }

render() { return ; } }

export default HomePageContainer;

相关内容

热门资讯

总算了解!wepoker私人局... 总算了解!wepoker私人局可以透视(辅助挂)总是是有挂(真实有挂辅助工具)1、在插件功能辅助器技...
必知教程!德州局脚本(辅助挂)... 必知教程!德州局脚本(辅助挂)真是是真的有挂(讲解有挂辅助方法)1、超多福利:超高返利,海量正版游戏...
分享开挂内幕!pokernow... 分享开挂内幕!pokernow辅助工具(辅助挂)一直真的有挂(有挂详情辅助脚本)透视方法中分为三种模...
研究成果!拱趴大菠萝辅助神器(... 研究成果!拱趴大菠萝辅助神器(辅助挂)其实真的有挂(有挂教学辅助器)1、进入游戏-大厅左侧-新手福利...
玩家必看教程!pokerwor... 玩家必看教程!pokerworld修改器(辅助挂)好像真的有挂(有挂功能辅助器)1、全新机制【ai辅...
必备科技!wejoker辅助机... 必备科技!wejoker辅助机器人(辅助挂)原来真的有挂(有挂分享辅助教程)1、不需要AI权限,帮助...
一分钟了解!wepoker免费... 一分钟了解!wepoker免费脚本咨询(辅助挂)切实存在有挂(有挂详细辅助脚本)能透视中分为三种模型...
必看攻略!wepoker有透视... 必看攻略!wepoker有透视底牌吗(辅助挂)果然真的是有挂(有挂攻略辅助脚本)1、进入游戏-大厅左...
交流学习经验!hhpoker俱... 交流学习经验!hhpoker俱乐部是干嘛的(辅助挂)确实存在有挂(确实有挂辅助脚本)1、有没有辅助教...
必备攻略!德普之星私人局辅助器... 必备攻略!德普之星私人局辅助器(辅助挂)都是有挂(有挂实锤辅助软件)1、每一步都需要思考,不同水平的...