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;

相关内容

热门资讯

教程辅助!hhpoker德州有... 教程辅助!hhpoker德州有挂吗(辅助挂)其实是有挂(有挂方法)1、这是跨平台的hhpoker德州...
六分钟了解!德普之星辅助软件(... 六分钟了解!德普之星辅助软件(辅助挂)真是是有挂(有挂透视)1、进入游戏-大厅左侧-新手福利-激活码...
详细说明!aapoker辅助工... 详细说明!aapoker辅助工具安全吗(辅助挂)一贯真的有挂(有挂猫腻)aapoker辅助工具安全吗...
总算了解!aapoker插件(... 总算了解!aapoker插件(辅助挂)本来是真的有挂(有挂秘诀)1、下载好aapoker插件正确养号...
重磅来袭!pokermaste... 重磅来袭!pokermaster修改器(辅助挂)真是存在有挂(有挂讲解)1、pokermaster修...
六分钟了解!拱趴大菠萝万能挂图... 六分钟了解!拱趴大菠萝万能挂图解(辅助挂)竟然存在有挂(揭秘有挂)暗藏猫腻,小编详细说明拱趴大菠萝万...
总算明白!wpk私人辅助(辅助... 总算明白!wpk私人辅助(辅助挂)一直是真的有挂(有挂辅助)1、下载好wpk私人辅助正确养号方法之后...
玩家必看科普!aapoker真... 玩家必看科普!aapoker真的假的(辅助挂)切实真的是有挂(有挂技巧)1、完成aapoker真的假...
一分钟了解!德普之星辅助器(辅... 一分钟了解!德普之星辅助器(辅助挂)竟然真的是有挂(确实有挂)1.德普之星辅助器 选牌创建新账号,点...
来一盘!大菠萝辅助器(辅助挂)... 来一盘!大菠萝辅助器(辅助挂)好像存在有挂(有挂秘籍)1、游戏颠覆性的策略玩法,独创攻略技巧玩法,可...