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;

相关内容

热门资讯

最新通报!娱家麻将开挂功能ap... 最新通报!娱家麻将开挂功能app,娱家麻将一直是真的有开挂app(有辅助挂猫腻)娱家麻将破解侠是真的...
揭秘攻略!雅苑蕲春麻将开挂功能... 揭秘攻略!雅苑蕲春麻将开挂功能教程,雅苑蕲春麻将本来真的是有开挂教程(有辅助挂教学)1、任何雅苑蕲春...
必备教程!约局吧透视功能神器,... 必备教程!约局吧透视功能神器,约局吧果然存在有透视神器(有辅助挂教学)1、约局吧公共底牌简单,约局吧...
一分钟揭秘!巴西辅助器功能方法... 一分钟揭秘!巴西辅助器功能方法,巴西一贯有辅助器方法(有辅助挂方针)在进入巴西软件靠谱后,参与本局比...
分辨真假!丁丁麻将辅助功能教程... 分辨真假!丁丁麻将辅助功能教程,丁丁麻将原来真的有辅助教程(有辅助挂技术)1、完成丁丁麻将辅助器v3...
三分钟了解!甬城竞技辅助器功能... 三分钟了解!甬城竞技辅助器功能app,甬城竞技一贯存在有辅助器app(有辅助挂方法)1、甬城竞技辅助...
重大推荐!天天九州麻将开挂功能... 重大推荐!天天九州麻将开挂功能插件,天天九州麻将好像真的有开挂插件(有辅助挂技巧)天天九州麻将脚本下...
重大消息!斗地主经典版透视功能... 重大消息!斗地主经典版透视功能神器,斗地主经典版真是真的是有透视神器(有挂辅方法)在进入斗地主经典版...
一分钟了解!微乐常德跑得快透视... 一分钟了解!微乐常德跑得快透视功能软件,微乐常德跑得快真是有透视软件(有挂辅方法)微乐常德跑得快是不...
推荐几款新版!微乐够级辅助功能... 推荐几款新版!微乐够级辅助功能app,微乐够级本来有辅助app(有辅助挂教程)1、许多玩家不知道微乐...