为了账号安全,请及时绑定邮箱和手机立即绑定

Next.js - 理解 getInitialProps

Next.js - 理解 getInitialProps

Qyouu 2021-06-02 17:46:09
我有一个使用 next.js 和 Apollo/Graphql 的应用程序,我正在尝试完全了解getInitialProps生命周期挂钩的工作原理。getInitialProps在我的理解中,生命周期用于设置一些初始道具,这些道具将在应用程序首次加载时呈现服务器端,可以使用从数据库中预取数据以帮助 SEO 或只是为了提高页面加载时间。我的问题是这样的:每次我有一个query组件在我的应用程序中获取组件中的一些数据时,我是否必须使用getInitialProps以确保数据将在服务器端呈现?我的理解也是getInitialProps它只适用于页面索引组件(以及在 中_app.js),这意味着组件树中较低的任何组件都无法访问此生命周期,并且需要从上往下获取一些初始道具在页面级别,然后让它们向下传递组件树。(如果有人能证实这个假设会很棒)这是我的代码:_app.js(在/pages文件夹中)import App, { Container } from 'next/app';import { ApolloProvider } from 'react-apollo';class AppComponent extends App {  static async getInitialProps({ Component, ctx }) {    let pageProps = {};    if (Component.getInitialProps) {      pageProps = await Component.getInitialProps(ctx)    }    // this exposes the query to the user    pageProps.query = ctx.query;    return { pageProps };  }  render() {    const { Component, apollo, pageProps } = this.props;    return (      <Container>        <ApolloProvider client={apollo}>           <Component client={client} {...pageProps} />                       </ApolloProvider>      </Container>    );  }}export default AppComponent;Index.js(在/pages/users文件夹中)import React, { PureComponent } from 'react';import { Query } from 'react-apollo';import gql from 'graphql-tag';const USERS_QUERY = gql`  query USERS_QUERY {    users {      id      firstName    }   }`;class Index extends PureComponent {  render() {    return (      <Query query={USERS_QUERY}>        {({data}) => {          return data.map(user => <div>{user.firstName}</div>);        }}      </Query>    );  }}export default Index;
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 302 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信