学习一个东西最快的方式还是要自己进行实战。
写一个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(<Router routes={routeConfig} />, 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
参数
<Route path="/hello/:name"> // 匹配 /hello/michael 和 /hello/ryan
<Route path="/hello(/:name)"> // 匹配 /hello, /hello/michael 和 /hello/ryan
<Route path="/files/*.*"> // 匹配 /files/hello.jpg 和 /files/path/to/hello.jpg
如果一个路由使用了相对路径
,那么完整的路径将由它的所有祖先节点的路径
和自身指定的相对路径
拼接而成。使用绝对路径
可以使路由匹配行为忽略嵌套关系。
优先级
最后,路由算法会根据定义的顺序自顶向下匹配路由。因此,当你拥有两个兄弟路由节点配置时,你必须确认前一个路由不会匹配后一个路由中的路径
。例如,千万不要这么做:
<Route path="/comments" ... />
<Redirect from="/comments" ... />
Histories
React Router 是建立在 history 之上的。 简而言之,一个 history 知道如何去监听浏览器地址栏的变化, 并解析这个 URL 转化为 location
对象, 然后 router 使用它匹配到路由,最后正确地渲染对应的组件。
常用的 history 有三种形式, 但是你也可以使用 React Router 实现自定义的 history。
你可以从 React Router 中引入它们:
// JavaScript 模块导入(译者注:ES6 形式)
import { browserHistory } from 'react-router'
然后将它们传递给<Router>
:
render(
<Router history={browserHistory} routes={routes} />,
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则专门提供了在原生移动应用中需要用到的部分。