1、react-router4

  是一个 react 组件

  通过和 location / histroy 结合,来显示页面不同URL对应显示不同的组件

  其中包含了三种路由。hash / boswer 等

2、react-router基本原理

  要对 history 进行解析和封装

  要对 history/location 的改变进行监听

  当 history/locaiton 改变触发 组件的路由检测

  最后对应的渲染匹配的组件

3、实现

  根据以上的分析。

  我们可以开始实现基础模型代码

  

  创建要给 Router.js 组件

  this.state = {
children: null
}
// 这里是我们要渲染的子组件
// 匹配好的组件组装后显示

  

   componentWillMount() {
let {children} = this.props
const {pathnpame} = window.location
children = this.checkRouter(children, pathname)
this.setState({
children
})
}
// 因为是模型代码
// 所以我之写初次进入的代码
// 在这里我们拦截 componentWillMount
// 根据 pathnpame ,children 实现检测和匹配
// checkRouter 匹配检测函数

  

  function checkRouter(childrens, pathname) {
childrens.forEach((item, index) => {
const {props, type} = item
if (Object.prototype.toString.call(type) == '[object Function]' && type.name == 'Route') {
let {extra, path, children} = props
console.log(item)
if (path !== pathname && !extra) {
childrens[index].props.children= null
} else {
if (new RegExp(`^${path}`).test(pathname)) {
let {children} = props
if (Object.prototype.toString.call(children) == '[object Array]') {
childrens[index].props.children = checkRouter(children, pathname)
}
} else {
childrens[index].props.children= null
}
}
} else {
let {children} = props
if (Object.prototype.toString.call(children) == '[object Array]') {
childrens[index].props.children = checkRouter(children, pathname)
}
} })
return childrens
}

  

  // 这里是匹配具体的规则

  // 代码不多,自己理解吧

  在创建一个 route.js

  route.js 只要实现返回 子组件就 OK 了

4、调用

            <Router>
<div>1</div>
<Text>
<div>3</div>
<Route path='/test2'>7</Route>
</Text>
<Route path='/test'>4</Route>
<Route extra path='/switch'>
<div>2</div>
<Route path='/switch/one'>5</Route>
<Route path='/switch/two'>
<div>6</div>
</Route>
</Route>
</Router>

  

5、完成

有什么问题可以留言回复哦!!!

最新文章

  1. windows系统和ubuntu虚拟机之间文件共享——samba
  2. yii框架详解 之 CActiveRecord
  3. 关于plsql连接oracle数据库session失效时间设置
  4. 我是如何使用git的
  5. nova help network-create
  6. 一起刑事案件法庭辩护 z
  7. jQuery学习笔记(1)
  8. 学习jax-ws(一)
  9. HDU 5752 Sqrt Bo (数论)
  10. bzoj 3122 [Sdoi2013]随机数生成器(逆元,BSGS)
  11. java String对象的创建(jvm).
  12. 【C#网络基础】C# get post请求
  13. mysql to sql sersver
  14. css背景渐变兼容(兼容所有ie)
  15. QPointer很大程度上避免了野指针(使用if语句判断即可,类似于dynamic_cast),而且使用非常方便 good
  16. IEcss样式,行高的问题
  17. css-dialog样式实现弹框蒙层全屏无需JS计算高度兼容IE7
  18. 机器学习:Python实现聚类算法(一)之K-Means
  19. Android———最详细的系统对话框使用
  20. 利用axure软件实现app中的轮播图功能

热门文章

  1. [React] Fetch Data with React Suspense
  2. windows 命令
  3. 鸿蒙OS
  4. day 11
  5. WIFI万能钥匙面试引出上线注意事项
  6. join的用法
  7. 关于js函数解释(包括内嵌,对象等)
  8. 第08组 Alpha冲刺(2/4)
  9. 树莓派3B+红外配置
  10. java性能优化之HashMap,LinkedHashMap,TreeMap读取大量数据效率的比较