美文网首页
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