美文网首页
React router内是如何做到监听history改变的

React router内是如何做到监听history改变的

作者: 晚安呢太阳 | 来源:发表于2018-04-27 21:07 被阅读0次

    问题背景

    今天面试的时候,被问到这么个问题。在html5的history情况下,pushstate和replacestate是无法触发pushstate的事件的,那么他是怎么做到正确的监听呢?我当时给懵住了,对哦,这怎么监听的到吗?
    

    于是今晚在旅馆,啊,没电脑啊,只能手机打开google搜索了,好像没搜到,于是我自己去github扒源码了。啊,没带电脑看代码好吃力啊,吐槽下┐(‘~`;)┌

    源码解析在此

    • 首先,你用router就得用history.push啊replace啊等来操作历史记录,依次看下面两个图高亮处你就懂了:


      React router内是如何做到监听history改变的
    React router内是如何做到监听history改变的
    React router内是如何做到监听history改变的 React router内是如何做到监听history改变的

    首先,第一副图中,push方法内部会去调用setState方法,而第二幅图setState方法中又去调用了notifyxxxxx方法,到了第三幅图,notifyxxx方法内部会遍历一个listeners数组来调用。再来到第四幅图,每次history listen方法都会调用那个append方法往第三幅图中的listeners数组中push一个listerner。

    所以,原理其实很简单啊,就是一个最最最简单的observer模式啊。哎哟我去-_-||

    相关文章

      网友评论

          本文标题:React router内是如何做到监听history改变的

          本文链接:https://www.haomeiwen.com/subject/xbwilftx.html