本工具包括以下几个功能实现,
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 实现。
最后根据当前的环境进行路由替换。