React 学习笔记 12 (Hash路由的实现原理)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hash路由</title>
</head>

<body>
    <div id="root" style="border:3px solid red;height:200px"> </div>
    <button onclick="push('/a')">/a</button>
    <button onclick="push('/b')">/b</button>
    <button onclick="push('/c')">/c</button>
    <script>
        let container = document.getElementById('root');
        //监听弹出状态的事件 浏览器上的后退按钮
        window.onpopstate = function (event) {
            //console.log(event);
            container.innerHTML = event.state.to;
        }
        // 自定义实现压栈状态的事件,这个事件window上是没有的
        function push(to) {
            // 参数一 状态
            // 参数二 标题 没有用到
            // 参数三 跳转的路径
            window.history.pushState({to},null,to)
        }
        // 覆写window.history.pushState方法
        // 1.先保存一下原有的方法
        const pushState = window.history.pushState;
        // 2.覆写
        window.history.pushState = function(state,title,url){
            // 3.调用系统的该方法
            pushState.call(window.history,state,title,url);
            // 4.调用自定义的onpushstate事件
            window.onpushstate(state,title,url)
        }
        // 5.将事件定义在window属性上 浏览器的前进按钮
        window.onpushstate = function(state,title,url) {
            container.innerHTML = state.to || url
        }
    </script>
</body>

</html>

 

上一篇:Linux 挂载(NFS)


下一篇:181. 超过经理收入的员工