使用 Fastify 和 React 构建客户端渲染 Web 应用程序
前言
Web 应用程序的开发离不开前端技术,随着 Web 应用程序的复杂度不断提高,前端技术也变得越来越重要。本文将介绍如何使用 Fastify 和 React 构建客户端渲染 Web 应用程序。
Fastify 是一个高性能的基于 Node.js 的 Web 框架,它的设计目的是提供最佳的速度和最小的内存占用。React 是 Facebook 推出的一个开源的 JavaScript 库,用于构建高效的用户界面。使用 Fastify 和 React 可以快速构建出高性能的 Web 应用程序。
快速开始
在开始使用 Fastify 和 React 构建 Web 应用程序之前,需要安装以下软件:
- Node.js(建议使用最新的版本)
- Yarn 或 npm(本文将使用 Yarn)
准备工作完成后,可以通过以下步骤快速创建一个项目:
- 创建项目文件夹
mkdir my-app cd my-app
- 初始化项目
yarn init -y
- 安装 Fastify 和 React
yarn add fastify react react-dom
- 创建入口文件
在项目文件夹中创建一个 index.js 文件,作为项目的入口文件。
const fastify = require('fastify')()
fastify.get('/', async (req, reply) => {
const App = require('./App').default
const html = renderToString()
reply.type('text/html').send( <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello World</title> </head> <body> <div id="root">${html}</div> <script src="/bundle.js"></script> </body> </html>
)
})
fastify.listen(3000, (err) => {
if (err) throw err
console.log(Server listening on http://localhost:3000
)
})
- 创建 App 组件
在项目文件夹中创建一个 App.js 文件,作为应用程序的主要组件。
import React from 'react'
function App() { return (
Hello World
export default App
- 创建 webpack 配置文件
在项目文件夹中创建一个 webpack.config.js 文件,配置 webpack。
const path = require('path')
module.exports = { entry: './client.js', output: { filename: 'bundle.js', path: path.resolve(__dirname, 'public'), }, module: { rules: [ { test: /.(js|jsx)$/, exclude: /node_modules/, use: { loader: 'babel-loader', options: { presets: ['@babel/preset-react'], }, }, }, ], }, }
- 创建客户端入口文件
在项目文件夹中创建一个 client.js 文件,作为客户端的入口文件。
import React from 'react' import { render } from 'react-dom' import App from './App'
render(, document.getElementById('root'))
至此,一个简单的 Fastify 和 React 应用程序已经创建完成。
深入学习
- 服务端渲染
服务端渲染(SSR)可以提供更好的性能和更好的用户体验,因为它可以在服务器上提前生成页面,并在浏览器加载完成前发送 HTML、CSS 和 JavaScript 代码。在某些情况下,SSR 还可以提高搜索引擎的可访问性,因为搜索引擎可以看到完全渲染的页面。
使用 Fastify 和 React 进行 SSR 的最简单方法是使用 react-ssr 库。该库提供了一个名为 fastify-react-ssr 的插件,用于将 React 组件渲染为字符串并将其包含在 HTML 模板中。
安装 react-ssr:
yarn add react-ssr
使用 fastify-react-ssr 插件:
const fastify = require('fastify')() const { fastifyReactSSR } = require('react-ssr')
fastify.register(fastifyReactSSR, {
defaultTitle: 'My App',
template: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>{title}</title> </head> <body> <div id="root">{children}</div> <script src="/bundle.js"></script> </body> </html>
,
render: (Component, props) => <Component {...props} />,
})
fastify.get('/', async (req, reply) => { reply.renderReact('App', {}) })
- 使用 Redux 状态管理
Redux 是一个流行的 JavaScript 状态容器,用于管理 React 应用程序的状态。它提供了一种简单的方式来管理复杂的状态,并使状态更容易可靠和可预测。
使用 Redux 需要在项目中添加以下软件包:
- redux:Redux 库
- react-redux:React 绑定库
- redux-thunk:Redux 异步处理库
安装 redux、react-redux 和 redux-thunk:
yarn add redux react-redux redux-thunk
创建 Redux Store:
import { createStore, applyMiddleware } from 'redux' import { Provider } from 'react-redux' import thunk from 'redux-thunk' import rootReducer from './reducers'
const store = createStore( rootReducer, applyMiddleware(thunk), )
app.use((req, reply) => { const context = {} const App = ( )
const html = renderToString(App)
if (context.url) { reply.redirect(context.url) } else { reply .code(context.statusCode || 200) .header('Content-Type', 'text/html') .send(renderFullPage(html, store.getState())) } })
- 使用 GraphQL 进行数据查询
GraphQL 是一种用于查询和操作数据的 API 语言,它是由 Facebook 开发的。使用 GraphQL 可以在客户端上发起准确的数据查询,并通过响应性能更好地控制数据的传输量。
安装以下软件包:
- express:用于创建 Web 服务器
- graphql:GraphQL 库
- express-graphql:将 GraphQL 服务连接到 Express 服务器的库
- graphql-tag:用于将 GraphQL 查询转换为 JavaScript 对象的库
- apollo-boost:用于将 GraphQL 服务与客户端集成的库
安装软件包:
yarn add express graphql express-graphql graphql-tag apollo-boost
添加以下代码以启动 GraphQL 服务:
const express = require('express') const { graphqlHTTP } = require('express-graphql') const { makeExecutableSchema } = require('graphql-tools') const { ApolloServer, gql } = require('apollo-server-express') const { typeDefs, resolvers } = require('./graphql')
const app = express()
const server = new ApolloServer({ typeDefs, resolvers, context: ({ req }) => ({ headers: req.headers }), })
server.applyMiddleware({ app })
app.listen(3000, () => console.log('Server started!'))
结论
使用 Fastify 和 React 可以快速构建出高性能的 Web 应用程序。本文介绍了如何使用 Fastify 和 React 进行客户端渲染、服务端渲染、Redux 状态管理和 GraphQL 数据查询。如有问题或建议,请在评论区留言。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66ff88361b0bf82c71cb6caf