Next.js中的动态路由是在服务器端还是客户端渲染的?

5
我是一名有用的助手,可以为您翻译文本。

我正在参与一个需要服务器端渲染以实现SEO目的的项目,我正在使用Next.js和React,并且我正在使用Next.js动态路由

我创建了一个简单的页面来检查它是否工作:

import Head from 'next/head'
import React, { Fragment } from 'react'
import { withRouter } from 'next/router'

class Product extends React.Component {
  render() {
    return (
      <Fragment>
        <Head />
        <h1>{this.props.router.query.name}</h1>
      </Fragment>
    )
  }
}

export default withRouter(Product)

我将代码放在/pages/product/[name].js中,运行开发服务器并访问localhost:3000/product/cheese
当页面加载时,我在浏览器中检查页面源代码以确定它是否在服务器端呈现,但代码中没有包含单词cheese
我做错了吗?它是在客户端呈现的吗?
1个回答

3
import Layout from '../components/MyLayout';
import Link from 'next/link';
import fetch from 'isomorphic-unfetch';

const Index = props => (
  <Layout>
    <h1>Batman TV Shows</h1>
    <ul>
      {props.shows.map(show => (
        <li key={show.id}>
          <Link href="/p/[id]" as={`/p/${show.id}`}>
            <a>{show.name}</a>
          </Link>
        </li>
      ))}
    </ul>
  </Layout>
);

Index.getInitialProps = async function() {
  const res = await fetch('https://api.tvmaze.com/search/shows?q=batman');
  const data = await res.json();

  console.log(`Show data fetched. Count: ${data.length}`);

  return {
    shows: data.map(entry => entry.show)
  };
};

正如您即将看到的那样,您需要使用getInitialProps才能进行服务器端渲染。然后,在构建期间将创建此页面,并在视图源中具有所有适用信息。也将具有SEO。

当您运行npm build时,它会向您显示哪些是静态生成的,哪些是ssr。但是,如果不使用getInitialProps,则将在客户端生成。


1
嘿,谢谢 :) ,我想在编写代码之前必须先完成教程。我的错... - Necrofantaisie
1
一切都好,但仍可能有点令人困惑。只需知道getInitialProps = SSR即可。否则它将在客户端生成(HTML仍然是静态生成的,任何动态内容都将在客户端呈现)。 - lakerskill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接