react server rendering(服務端渲染)
一個react專案在伺服器端渲染,其實最本質的一個點就在於路由。路由一般採用的是react-router
。其實在react-router
裡,它本身就提供了伺服器端渲染的方法,下面對它進行一下小小的學習。
服務端渲染跟客戶端渲染有點不同,因為,服務端渲染需要傳送500/30x,還要在渲染前就要請求資料。
react-router
提供了兩個更底層的api,一個是match
,另一個是RouterContext
。
match
是用來匹配路由的,但是它沒有渲染的功能。RouterContext
用來同步渲染components的。
看個例子:
import { renderToString } from 'react-dom/server'
import { match, RouterContext } from 'react-router'
import routes from './routes'
serve((req, res) => {
match({ routes, location: req.url }, (error, redirectLocation, renderProps) => {
if (error) {
res.status(500).send(error.message)
} else if (redirectLocation) {
res.redirect(302, redirectLocation.pathname + redirectLocation.search)
} else if (renderProps) {
res.status(200).send(renderToString(<RouterContext {...renderProps} />))
} else {
res.status(404).send('Not found')
}
})
})
這是一個非常簡單的在服務端渲染例子,但是現在一個最重要的問題,就是如何傳資料呢?
在react專案中,一般是用redux來進行資料的管理的。redux 裡有個store維護的state狀態樹。那麼在和api進行資料互動的時候,如何將資料放在store裡面呢?
基本的思路就是,在createStore的時候,將與api互動的方法同時傳入進去,這樣,在store中的action可以呼叫那個庫。呼叫庫去請求資料,一般是個promise物件,取到資料之後,然後在reducer中將資料reduce進state樹中。就完成了這個過程。
其實最最本質的,就是讓action能去api請求資料,只要action請求到了資料並且能進入reducer,那就成功了。這個思路跟客戶端渲染也沒有什麼區別。
在服務端渲染還有一個致命的報錯。來自於webpack。
在client,webpack可以require()各種靜態資源,但是在node 環境中,require()是隻能用於javascript 的。
這裡就要靠一個library了。
webpack-isomorphic-tools
具體的介紹在github中都有,也不在這裡贅述。
另外再向大家推薦一個完整的react例子,裡面有很多很多東西可以參考借鑑,甚至可以直接拿過來做自己的專案。
react栗子
相關文章
- react 服務端渲染React服務端
- React + React-Loadable 實現服務端渲染React服務端
- [譯]揭祕 React 服務端渲染React服務端
- typescript版的react服務端渲染TypeScriptReact服務端
- 如何用 React 做服務端渲染React服務端
- React服務端渲染(專案搭建)React服務端
- React + Koa 實現服務端渲染(SSR)React服務端
- React 服務端渲染原理及過程React服務端
- TypeScript + Webpack + Koa 搭建 React 服務端渲染TypeScriptWebReact服務端
- 服務端渲染到前端渲染,再到“服務端渲染”服務端前端
- React服務端渲染(前後端路由同構)React服務端後端路由
- React 服務端渲染從入門到精通React服務端
- React 服務端渲染完美的解決方案React服務端
- React服務端渲染實現(基於Dva)React服務端
- React 服務端渲染方案完美的解決方案React服務端
- React + Koa 實現服務端渲染(SSR) Part IIReact服務端
- React16.x中的服務端渲染(SSR)React服務端
- 深度理解React專案的服務端渲染改造React服務端
- Vue 服務端渲染 & 預渲染Vue服務端
- 服務端渲染和客戶端渲染服務端客戶端
- react高仿掘金移動版,支援服務端渲染React服務端
- react服務端渲染框架Next.js踩坑(一)React服務端框架JS
- react服務端渲染框架Next.js踩坑(三)React服務端框架JS
- react服務端渲染框架Next.js踩坑(二)React服務端框架JS
- React服務端渲染+pm2自動化部署React服務端
- Server-side rendering for any React app on any FaaS providerServerIDEReactAPP
- React服務端渲染(程式碼分割和資料預取)React服務端
- 用 TypeScript 編寫一個 React 服務端渲染庫(1)TypeScriptReact服務端
- Vue/React 元件 PHP 服務端渲染(SSR)可行性分析VueReact元件PHP服務端
- React服務端渲染改造框架(webpack3.11.0 + React16 + koa2)React服務端框架Web
- 如何理解服務端渲染?服務端
- Vue 服務端渲染(SSR)Vue服務端
- 服務端渲染基礎服務端
- react基礎學習和react服務端渲染框架next.js踩坑React服務端框架JS
- [譯] 使用 styled-components 的 React 服務端渲染極簡指南React服務端
- 靜態化與伺服器渲染(Static vs. Server Rendering)伺服器Server
- 部署 Node.js 應用以完成伺服器端渲染 Server Side Rendering 的效能調優Node.js伺服器ServerIDE
- Universal-webpack服務端渲染Web服務端
- node服務端渲染(完整demo)服務端