react服务端渲染详解(1)

React服务端渲染


react服务端渲染react-dom/server下的renderToString()方法,这个方法可以输出html字符串。通过node服务将编译好的字符串输出到前台浏览器解析达。废话少说上代码...

步骤:main.js(入口)、App.js(根组件)、server.js(node服务)、webpack.config.js(由于react是jsx需要webpack编译)

  • main.js入口
import React from 'react';
import {renderToString} from 'react-dom/server';
import App from './components/App';

export function ssrHtml(){
    return renderToString();
    //关键一步,这步可以将及所有组件转换为html字符串
};
  • App.js根组件
import React,{Component} from 'react';

class App extends Component{
    constructor(props){
        super(props)
    }
    
    render(){
        return (
            

hello,react-ssr

) } } export default App;
  • webpack.config.js

由于需要转换jsx,先安装
yarn add babel-loader @babel/core @babel/preset-react -D

const path = require('path');

module.exports = {
    mode: 'development',
    entry: './main.js',
    target: 'node',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname,'dist'),
        libraryTarget: 'umd'
    },
    module: {
        rules:[
            {
                test:/\.js$/,
                use: {
                    loader: 'babel-loader',
                    exclude: /node_modules/,
                    options: {
                        presets: ['@babel/preset-react']
                    }
                }
            }
        ]
    }
}
  • server.js服务端
const Koa = require('koa');
const router = require('koa-router')();
const {ssrHtml} = require('./dist/bundle');//引入编译好文件
const app = new Koa();
router.get('/', async(ctx)=>{
    ctx.body = ssrHtml();//输出html字符串
});

app.use(router.routes());
app.listen(6000,()=>{
    console.log('server runing http://localhost:6000');
})

至此已经能利react提供的方法输出实现第一步的服务端渲染,但是目前事件、状态还无法使用,明天继续更新...

你可能感兴趣的:(react.js,前端,javascript)