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;

相关内容

热门资讯

2026版方法!hhpoker... 2026版方法!hhpoker软件安装包,德扑之星私人局辅助免费,竟然是有挂(真的有挂)德扑之星私人...
更值得关注的是!aapoker... 更值得关注的是!aapoker辅助插件工具,如何下载德普之星辅助软件,切实是有挂(有挂技巧)1、用户...
值得注意的是!德普辅助软件,德... 值得注意的是!德普辅助软件,德普之星有透视辅助吗,都是真的有挂(有挂细节)1、德普之星有透视辅助吗脚...
黑科技技巧!wepoker私人... 黑科技技巧!wepoker私人局透视方法,德普辅助软件,都是存在有挂(真实有挂)1、实时德普辅助软件...
据报道!德州圈脚本,智星菠萝透... 据报道!德州圈脚本,智星菠萝透视,切实真的有挂(证实有挂)1、智星菠萝透视免费辅助多个强度级别选择2...
软件辅助挂!德普之星透视软件免... 软件辅助挂!德普之星透视软件免费入口官网,德普之星私人局辅助器,真是是真的有挂(有挂透明挂)1、完成...
随着!拱趴大菠萝挂,智星德州有... 随着!拱趴大菠萝挂,智星德州有脚本吗,一贯是有挂(有挂秘诀);1、随着!拱趴大菠萝挂,智星德州有脚本...
据权威媒体报道!德普之星有透视... 据权威媒体报道!德普之星有透视辅助吗,德扑圈透视挂,都是是有挂(有挂功能)1、该软件可以轻松地帮助玩...
围绕透视问题!werplan外... 围绕透视问题!werplan外挂,德扑之星私人局辅助免费,一直真的有挂(有挂细节)德扑之星私人局辅助...
据通报!wepoker手机助手... 据通报!wepoker手机助手,德扑之星怎么设置埋牌,总是是有挂(有挂辅助)1)德扑之星怎么设置埋牌...