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;

相关内容

热门资讯

教学盘点!抢庄牛牛辅助功能插件... 教学盘点!抢庄牛牛辅助功能插件,抢庄牛牛原来存在有辅助插件抢庄牛牛破解侠是真的助透视。每个模型中均包...
玩家亲测!海豚大厅透视功能攻略... 玩家亲测!海豚大厅透视功能攻略,海豚大厅确实是有透视攻略玩家亲测!海豚大厅透视功能攻略,海豚大厅确实...
玩家必看!博雅红河棋牌辅助器功... 玩家必看!博雅红河棋牌辅助器功能工具,博雅红河棋牌一贯有辅助器工具1、全新机制【博雅红河棋牌ai辅助...
热点推荐!永乐跑胡子辅助功能脚... 热点推荐!永乐跑胡子辅助功能脚本,永乐跑胡子原来真的是有辅助脚本1、永乐跑胡子辅助器安装包、永乐跑胡...
揭秘真相!今日长牌辅助器功能a... 揭秘真相!今日长牌辅助器功能app,今日长牌都是存在有辅助器app1、完成今日长牌辅助器v3.3的残...
今日焦点!宝石娱乐开挂功能脚本... 今日焦点!宝石娱乐开挂功能脚本,宝石娱乐真是真的是有开挂脚本1、宝石娱乐有没有辅助教程、宝石娱乐有透...
热门推荐!新海贝之城透视挂功能... 热门推荐!新海贝之城透视挂功能软件,新海贝之城原来真的是有透视挂软件1、新海贝之城免费辅助多个强度级...
发现一款!三打哈开挂功能技巧,... 发现一款!三打哈开挂功能技巧,三打哈真是真的有开挂技巧1、完成三打哈有辅助插件,帮助玩家取得所有比赛...
终于知道!冰河大厅透视挂功能神... 终于知道!冰河大厅透视挂功能神器,冰河大厅总是存在有透视挂神器;1、每一步都需要思考,不同水平的挑战...
盘点一款!博乐九台晃开挂功能方... 盘点一款!博乐九台晃开挂功能方法,博乐九台晃一贯真的有开挂方法1、下载好博乐九台晃正确养号方法之后点...