学习一个东西最快的方式还是要自己进行实战。
写一个Demo,包括搜索框,点击按钮实现页面跳转。
使用的技术:react-router
未完待续。
From # react、react-router、redux 也许是最佳小实践
Git如何切换账户(https://blog.csdn.net/junloin/article/details/75197880)
使用git时权限缺少导致部署失败
https://blog.csdn.net/lansefanggezi123/article/details/79681941
也许学习react-router最好的办法就是用react-router-dom v4来写一个多页的react应用。这个react应用会包含登录、注册、首页、联系人等页面。
React Router 保持 UI 与 URL 同步。它拥有简单的 API 与强大的功能例如代码缓冲加载、动态路由匹配、以及建立正确的位置过渡处理。你第一个念头想到的应该是 URL,而不是事后再想起。
路由配置
因为 route 一般被嵌套使用,所以使用 JSX 这种天然具有简洁嵌套型语法的结构来描述它们的关系非常方便。然而,如果你不想使用 JSX,也可以直接使用原生 route 数组对象。
上面我们讨论的路由配置可以被写成下面这个样子:
const routeConfig = [
{ path: '/',
component: App,
indexRoute: { component: Dashboard },
childRoutes: [
{ path: 'about', component: About },
{ path: 'inbox',
component: Inbox,
childRoutes: [
{ path: '/messages/:id', component: Message },
{ path: 'messages/:id',
onEnter: function (nextState, replaceState) {
replaceState(null, '/messages/' + nextState.params.id)
}
}
]
}
]
}
]
React.render( , document.body)
进入和离开的Hook
Route 可以定义 onEnter
和 onLeave
两个 hook ,这些hook会在页面跳转确认时触发一次。这些 hook 对于一些情况非常的有用,例如权限验证或者在路由跳转前将一些数据持久化保存起来。
在路由跳转过程中,onLeave
hook 会在所有将离开的路由中触发,从最下层的子路由开始直到最外层父路由结束。然后onEnter
hook会从最外层的父路由开始直到最下层子路由结束。
路由匹配原理
路由拥有三个属性来决定是否“匹配“一个 URL:
- 嵌套关系 和
- 它的
路径语法
- 它的 优先级
嵌套关系
React Router 使用路由嵌套的概念来让你定义 view 的嵌套集合,当一个给定的 URL 被调用时,整个集合中(命中的部分)都会被渲染。嵌套路由被描述成一种树形结构。React Router 会深度优先遍历整个路由配置来寻找一个与给定的 URL 相匹配的路由。
路径语法
路由路径是匹配一个(或一部分)URL 的 一个字符串模式。大部分的路由路径都可以直接按照字面量理解,除了以下几个特殊的符号:
-
:paramName
– 匹配一段位于/
、?
或#
之后的 URL。 命中的部分将被作为一个参数 -
()
– 在它内部的内容被认为是可选的 -
*
– 匹配任意字符(非贪婪的)直到命中下一个字符或者整个 URL 的末尾,并创建一个splat
参数
// 匹配 /hello/michael 和 /hello/ryan
// 匹配 /hello, /hello/michael 和 /hello/ryan
// 匹配 /files/hello.jpg 和 /files/path/to/hello.jpg
如果一个路由使用了相对路径
,那么完整的路径将由它的所有祖先节点的路径
和自身指定的相对路径
拼接而成。使用绝对路径
可以使路由匹配行为忽略嵌套关系。
优先级
最后,路由算法会根据定义的顺序自顶向下匹配路由。因此,当你拥有两个兄弟路由节点配置时,你必须确认前一个路由不会匹配后一个路由中的路径
。例如,千万不要这么做:
Histories
React Router 是建立在 history 之上的。 简而言之,一个 history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 location
对象, 然后 router 使用它匹配到路由,最后正确地渲染对应的组件。
常用的 history 有三种形式, 但是你也可以使用 React Router 实现自定义的 history。
browserHistory
hashHistory
createMemoryHistory
你可以从 React Router 中引入它们:
// JavaScript 模块导入(译者注:ES6 形式)
import { browserHistory } from 'react-router'
然后将它们传递给
:
render(
,
document.getElementById('app')
)
---From React Router 中文文档
React router v4 vs v3
v4是react router的一次重写,所以和v3有很多不同的地方。主要有:
- 在react router v4里,路由不再是集中在一起的。它成了应用布局、UI的一部分。
- 浏览器用的router在react-router-dom里。所以,浏览器里使用的时候只需要import react-router-dom就可以。
- 新的概念BrowerRouter和HashRouter。他们各自服务于不同的情景下。详见下文。
- 不再使用{props.children}来处理嵌套的路由。
- v4的路由默认不再排他,会有多个匹配。而v3是默认排他的,只会有一个匹配被使用。
react-router-dom是react-router中用于浏览器的。react-router被分为一下几部分:
- react-router是浏览器和原生应用的通用部分。
- react-router-dom是用于浏览器的。
- react-router-native是用于原生应用的。
react-router是核心部分。react-router-dom提供了浏览器使用需要的定制组件。react-router-native则专门提供了在原生移动应用中需要用到的部分。