本工具包括以下几个功能实现,
React Router版本为 2.0
- 根据开发环境决定使用
hashHistory还是browserHistory - js 代码中实现路由跳转
- 实现改变 queryString 的方法函数
以上功能实现起来很简单,主要是应用了process.env.NODE_ENV 这个环境变量,用以判断现在代码的运行环境,有兴趣的可以深入去了解一下 process.env 这个环境变量。
根据开发环境决定 history 类型
1 | import { browserHistory, hashHistory, IndexRoute, Route, Router } from 'react-router' |
其实实现起来非常简单,无非是根据当前的运行环境,将 history 改变。
js 代码中实现路由跳转
1 | import { browserHistory, hashHistory } from 'react-router' |
同样很简单,在这就不分析代码了。需要注意的一点是,这个 path 参数需要写全,举个例子吧:
hashHistory.push('homepage')这样的写法需要写成hashHistory.push('/homepage')。
请不要为了省事而不写这个/,不然会有意想不到的 bug,同理在 Link 标签中的 to 属性也应该写全。
实现改变 queryString 的方法函数
场景:作为常见的表格页,分页是少不了的,而保存当前页码,搜索字段的最好方法就是将这些字段存入
queryString中了。
1 | import { urlEncode } from 'utils' |
看看这个函数吧,默认参数有三个,第一个 router 为 react-router 的 router 属性,里面包括了我们要用到的 pathname、query参数。至于为何不直接取 window.location,这是考虑到开发环境的不同,所引起的 bug,当前 history 为 hashHistory时,window.location 中的pathname、query参数与我们所期待的不一样。
第二个参数为传入的 query 对象,这个就是我们需要修改的 queryString;第三个参数决定是否清除之前的 queryString。
函数中调用的 urlEncode 作用是将 params 参数拼接,点击可以跳转查看 urlEncode 实现。
最后根据当前的环境进行路由替换。