Next.js-了解getInitialProps

JavaScript React.js

JinJin

2020-03-23

我有一个使用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;

第2769篇《Next.js-了解getInitialProps》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

0个回答

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android