返回

初学者指南:使用 Create-React-App 在 CRA 项目中实施服务端渲染

前端

探索服务端渲染 (SSR) 的世界,它可以为你的 Create-React-App (CRA) 项目带来非凡的优势。让我们踏上一步步的旅程,使用 React 官方 API 来搭建自己的 SSR 设置。

服务端渲染的魅力

SSR 是一种技术,可以将你的 React 应用程序预渲染为 HTML,并在用户请求时将该 HTML 发送到浏览器。这种方法提供了一些关键优势:

  • 更快的初始加载时间: SSR 消除了客户端渲染的延迟,为用户提供了即时可用的页面。
  • 更好的 SEO: 预渲染的 HTML 使搜索引擎能够轻松抓取和索引你的内容,从而提高可见性和排名。
  • 更佳的应用程序稳定性: SSR 减少了客户端脚本的依赖性,导致更稳定的应用程序,即使在较弱的互联网连接下也能良好运行。

使用 React 官方 API 启用 SSR

让我们使用 React 官方 API 来为我们的 CRA 项目启用 SSR。

1. 安装必需的依赖项

npm install @zeit/next-bridge

2. 创建 next.config.js

在项目的根目录中创建一个名为 next.config.js 的新文件,并添加以下内容:

const { createNextPlugin } = require('@zeit/next-bridge');

module.exports = {
  webpack: (config, { isServer }) => {
    if (!isServer) {
      config.resolve.alias['next/client'] = require.resolve('@zeit/next-bridge/client');
    }
    return config;
  },
  plugins: [createNextPlugin()]
};

3. 创建 getServerSideProps

在你的组件中,创建一个名为 getServerSideProps 的函数,如下所示:

export const getServerSideProps = async (context) => {
  // 从服务器获取数据
  const data = await fetch('...');

  // 返回 props,将数据传递给组件
  return {
    props: {
      data
    }
  };
};

4. 使用 hydrate()

在客户端,使用 hydrate() 函数将预渲染的 HTML 注入到 DOM 中。在你的 index.js 文件中:

import React from 'react';
import ReactDOM from 'react-dom/client';
import { hydrate } from 'react-dom';
import App from './App';

const root = ReactDOM.createRoot(document.getElementById('root'));
hydrate(<App />, root);

优化 SSR 性能

  • 使用代码分割来减少初始包大小。
  • 使用缓存机制来存储预渲染的 HTML。
  • 优化数据获取策略以最小化延迟。

结论

通过利用 React 官方 API,你已经成功地在你的 CRA 项目中实现了 SSR。你的应用程序现在受益于更快的加载时间、更好的 SEO 和更高的稳定性。享受 SSR 带来的好处,构建一个更流畅、更强大的用户体验。