...
function routerconfig()
ssr.tsx 匹配路徑
...
export default (url: string | object, context: any,store: any)=>
renderfullpage.ts 渲染頁面
...
const renderfullpage = (ctx : iroutercontext, newstate:object ) =>
// 得到初始 state 建立新的 redux store 例項
const store = createstore(reducers, newstate);
// 從 redux store 得到初始 state,注入到window
const finalstate = store.getstate()
let initstate = ``;
//根據路由獲取html並注入到
,將 initstate 插到該節點後面
const html = reactdomserver.rendertostring(ssr(ctx.req.url, context, store));
let renderpage = myhtml.replace(/(\)(.|\n|\r)*(\<\/div\>)/i, "$1" + html + "$3" + initstate);
ctx.type = 'html';
ctx.body = renderpage;
}export default renderfullpage;
index.tsx 前端的路由處理
...
const preloadedstate = window.__initial_state__ || {} //
// 使用初始 state 建立 redux store
const store = createstore(reducers, preloadedstate)
render(
,document.getelementbyid('root') as htmlelement
)
1..redux方面,先建立新的 redux store 例項,將我們需要初始的state合併到 store2.通過 store.getstate() 獲取最終的finalstate
3.通過 staticrouter 可以獲取路徑匹配的頁面元件,並通過 reactdomserver.rendertostring 轉化為html元素
ssr.tsx 主要做了兩件事:
1.將初始的 store 注入redux
2.返回帶有 store 資料的路徑匹配的頁面元件,也就是說這個頁面已經是有初始資料了
4.將讀取的html模板注入資料,在這裡我們需要通過簡單的正則替換一下
在 中插入我們的html元素
在 後面插入
5.將這個頁面傳送出去
6.js載入的時候會讀取
window.__initial_state__
的資料,合併到 store
export default (html, finalstate)=>(`$
window.__initial_state__ = $
`)
git clone [email protected]:m-ryan/typescript-koa-ssr-react-boilerplate.git開發環境 npm startcd typescript-koa-ssr-react-boilerplate
生產環境 npm run build
TypeScript版線段樹
脫離acm隊伍已經一年多了,現在還能手寫的演算法不多,線段樹是其中一種。謹以此文紀念逝去的acm生涯 線段樹是一種二叉搜尋樹,常用於區間求和 區間求極值,其查詢和更新時間複雜度是o logn 線段樹的主要操作包括初始化 更新和查詢 1.初始化 初始化過程是乙個遞迴演算法,從根節點遞迴全樹。作用是設定...
FileInputStream中的read 方法
首先這是我自己寫 的時候遇到的乙個問題,我思來想去,終於想通透了,所以想分享給大家,當然這也是乙個非常簡單的問題,大神勿噴。public class io inputstream public static void main string args 但是列印結果就是 246,隔乙個列印乙個,我感到...
typeScript中的繼承
ts中類的定義 class person run void let p new person 李哥 p.run 李哥 class person getname string setname name string void let p new person 李哥 alert p.getname 李哥...