React服務器端渲染入門

React服務器端渲染入門

  • 理解
    • 當服務器端接收到請求時, 在服務器端基于React動態(tài)渲染頁面, 并返回給瀏覽器顯示
    • 相對于瀏覽器端渲染的好處?
      • 服務器端和客戶端可以共享某些代碼瘦馍,避免重復定義歼秽。
      • 首次加載頁面的速度加快
      • 便于SEO(搜索引擎)優(yōu)化。服務器端渲染可以讓搜索引擎更容易讀取頁面的meta信息以及其他SEO相關(guān)信息
        • 說到這里情组,我們再拓展一點:一個image標簽燥筷,seo是先找它的alt還是找title呢箩祥?答案是,找alt
    • 相對于瀏覽器端渲染的不好?
      • 對服務器的壓力增大
      • 要求服務器使用基于node搭建
  • 簡單編碼實現(xiàn)服務器端渲染
    • 應用文件結(jié)構(gòu)
      react-node
        |-- src
            |-- App.js-----------------主組件js
            |-- server.js--------------啟動服務器監(jiān)聽, 處理請求的js
        |-- index.js---------入口js
        |-- .babelrc---------babel配置文件
        |-- package.json-----應用包信息文件
      
    • 編碼
      • package.json
        {
          "name": "react-node",
          "version": "1.0.0",
          "scripts": {
            "start": "node index"
          },
          "devDependencies": {
            "babel-preset-es2015": "^6.6.0",
            "babel-preset-react": "^6.5.0",
            "babel-register": "^6.8.0"
          },
          "dependencies": {
            "react": "^15.3.1",
            "react-dom": "^15.3.1"
          }
        }
        
      • .babelrc
        {
          "presets": ["react", "es2015"]
        }
        
      • App.js
        import React, {Component} from 'react'
        class App extends Component {
        
          render() {
            return (
              <div>測試React服務器</div>
            )
          }
        }
        export default App
        
      • server.js
        import React from 'react';
        import { renderToString } from 'react-dom/server';
        var http = require('http');
        import App from './App';
        
        //創(chuàng)建服務器對象, 并啟動監(jiān)聽
        http.createServer(function (request, response) {
          //向瀏覽器端寫頭信息
          response.writeHead(200, {'Content-Type': 'text/html'});
          //渲染組件成標簽結(jié)構(gòu)字符串
          const appHTML = renderToString(<App />);
          //向瀏覽器返回結(jié)果
          response.end(appHTML);
        }).listen(8888);
        // 終端打印提示信息
        console.log('Server running at http://127.0.0.1:8888/');
        
      • index.js
        require('babel-register');
        require('./src/server.js');
        
    • 啟動服務器運行:
      • 命令: npm start
      • 訪問: http://127.0.0.1:8888

接下來也是代碼演示:


image.png

src/app.js

import React from "react";

export default class App extends React.Component{
    constructor(props){
        super(props);
    }

    render(){
        return (
            <div>測試React服務器</div>
        )
    }
}

sec/server.js:

import React from 'react';
import { renderToString } from 'react-dom/server';
var http = require('http');
import App from './App';

//創(chuàng)建服務器對象, 并啟動監(jiān)聽
http.createServer(function (request, response) {
  //向瀏覽器端寫頭信息
  response.writeHead(200, {'Content-Type': 'text/html'});
  //渲染組件成標簽結(jié)構(gòu)字符串
  const appHTML = renderToString(<App />);
  //向瀏覽器返回結(jié)果
  response.end(appHTML);
}).listen(8888);
// 終端打印提示信息
console.log('Server running at http://127.0.0.1:8888/');

index.js

//這里babel-register的意思就是用來解析下面的src/server文件
require("babel-register");
require("./src/server");

output頁面:
在頁面上輸出:測試React服務器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肆氓,一起剝皮案震驚了整個濱河市袍祖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谢揪,老刑警劉巖蕉陋,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拨扶,居然都是意外死亡凳鬓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門患民,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缩举,“玉大人,你說我怎么就攤上這事酒奶∫峡祝” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵惋嚎,是天一觀的道長。 經(jīng)常有香客問我站刑,道長另伍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任绞旅,我火速辦了婚禮摆尝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘因悲。我一直安慰自己堕汞,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布晃琳。 她就那樣靜靜地躺著讯检,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卫旱。 梳的紋絲不亂的頭發(fā)上人灼,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音顾翼,去河邊找鬼投放。 笑死,一個胖子當著我的面吹牛适贸,可吹牛的內(nèi)容都是我干的灸芳。 我是一名探鬼主播涝桅,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼烙样!你這毒婦竟也來了苹支?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤误阻,失蹤者是張志新(化名)和其女友劉穎债蜜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體究反,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡寻定,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了精耐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狼速。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖卦停,靈堂內(nèi)的尸體忽然破棺而出向胡,到底是詐尸還是另有隱情,我是刑警寧澤惊完,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布僵芹,位于F島的核電站,受9級特大地震影響小槐,放射性物質(zhì)發(fā)生泄漏拇派。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一凿跳、第九天 我趴在偏房一處隱蔽的房頂上張望件豌。 院中可真熱鬧,春花似錦控嗜、人聲如沸茧彤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽曾掂。三九已至,卻和暖如春承边,著一層夾襖步出監(jiān)牢的瞬間遭殉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工博助, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留险污,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像蛔糯,于是被迫代替她去往敵國和親拯腮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容