每日面試一題

router的底層實現(xiàn)


當url地址或者點擊forword/back或者點擊link時。以browserHistory(一種history類型:一個 history 知道如何去監(jiān)聽瀏覽器地址欄的變化, 并解析這個 URL 轉化為 location 對象)為例 :


browserHistory進行路由state管理,主要通過sessionStorage

//保存 路由state(router state)

function saveState(key, state) {

? ...

? window.sessionStorage.setItem(createKey(key), JSON.stringify(state));

}

//讀取路由state

function readState(key) {

? ...

? json = window.sessionStorage.getItem(createKey(key));

? return JSON.parse(json);

}

其中saveState函數傳進來的state是個json對象,如:


{route: '/about'} ///假設此時的location為'/about'

進行路由匹配,最終渲染對應的組件

const About = React.createClass({/*...*/}) //About 組件

const Inbox = React.createClass({/*...*/}) //Inbox 組件

const Home = React.createClass({/*...*/}) //Home組件

render() {

? ? let Child

? ? switch (this.state.route) {

? ? ? case '/about': Child = About; break;

? ? ? case '/inbox': Child = Inbox; break;

? ? ? default:? ? ? Child = Home;

? ? }


? ? return (

? ? ? <div>

? ? ? ? <h1>App</h1>

? ? ? ? <ul>

? ? ? ? ? <li><a href="#/about">About</a></li>

? ? ? ? ? <li><a href="#/inbox">Inbox</a></li>

? ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容