ルートの原理を知らなければなりません

8132 ワード

hashルーティング


hashによるルーティング
<html lang="en">
<head>
  <style>
    #root{
      height: 200px;
      border: 1px solid red;
    }
  style>
head>
<body>
  <a href="#/a"> /aa>
  <a href="#/b"> /ba>
  <div id="root">div>
  <script>
    let container = document.getElementById('root');
    window.addEventListener('hashchange',function (e) {
      console.log(e);
      container.innerHTML = ` ${window.location.hash.slice(1)}`;
    })
  script>
body>
html>
  • hashにより経路が切り換えるとhashchangeイベント
  • がトリガーされる.
  • 現在のページのwindow.location.hash
  • hashで入手できる.

    Browserルーティング

    H5——APIによるルーティング

    historyオブジェクト


    ブラウザセッション履歴を操作するインタフェースを提供
  • 【1】backは、ブラウザのフォールバックボタン
  • として機能する前のパスにジャンプする.
  • 【2】forward次のパスにジャンプし、ブラウザの前進ボタン
  • に作用する.
  • 【3】goあるパスにジャンプ
  • 【3-1】パラメータは、現在のパスに対するキュー数、例えばgo(1) === forword()go(-1) === back()である.

  • 【4】lengthは、現在のパスキューに格納パス個数
  • を示す.
  • 【5】pushStateは、現在のパスキューに新しいパスを追加し、新しいパスにジャンプする.length + 1
  • 【5-1】パラメータ3個history.pushState({name:' '},' ( )','/ ')
  • 【6】replaceStateは、現在のパスキューにおいて、現在のパスを新しい置換する.length不変
  • 【6-2】パラメータ同pushState

  • げんり

    <html lang="en">
    <head>
      <style>
        #root {
          height: 200px;
          border: 1px solid red;
        }
      style>
    head>
    <body>
      <button onclick="push('/a')">/abutton>
      <button onclick="push('/b')">/bbutton>
      <button onclick="push('/c')">/cbutton>
      <div id="root">div>
      <script>
        let container = document.getElementById('root');
        /**
         *  ( )
         */
        window.onpopstate = function (e) {
          console.log(e);
          container.innerHTML = e.state.to;
        }
        function push(to) {
          /**
           * pushState ( )
           *   1.  2. ( ) 3. 
           */
          window.history.pushState({ to }, null, to);
        }
      script>
    body>
    html>
    
  • 上図から分かるように、ルーティングボタンをクリックすると経路の切替
  • が実現する.
  • ブラウザのロールバックまたは前進をクリックすると、経路の切り替えとビューの切り替え(すなわちwindow.onpopstateがトリガ)
  • が実現する.
  • しかし、私たちが望んでいる効果は、ルート切替ボタンをクリックしたときにもビューの切替を行うべきで、文章の前のあなたは私と同じ考えを持っているに違いありません.window.onpushstate事件をバインドしていますが、残念ながら、ブラウザは私たちにこの事件を提供してくれませんでした.

  • pushStateの最適化&&onpushstateの実現方法-ルーティング切替ボタンをクリックしながらビュー切替を実現

    let oldPushState = window.history.pushState; //  pushState ;
    window.history.pushState = function(state,title,url){
        onpushstate(state,title,url); //  onpushstate 
        oldPushState.call(window.history,state,title,url); //  pushState 
    }
    window.onpushstate = function(state,title,url){
        container.innerHTML = state.to || url;
    }
    

    最後に書く


    文章は主に底層の角度から単ページ応用ルーティングの実現原理を剖析し、三大フレームワークのルーティング原理もこの底層思想に基づいて実現され、後続はReact-Routerのソースコード解析をもたらす.書いてあると思ったら手伝ってもらえますか?、?小生は感謝に堪えない.の
    転載先:https://juejin.im/post/5cf27d9d6fb9a07ed440e924