路由配置
React Router 保持 UI 与 URL 同步。它拥有简单的 API 与强大的功能例如代码缓冲加载、动态路由匹配、以及建立正确的位置过渡处理。
所谓的路由并不是指硬件设备的路由,但其原理相同,假设提供的web服务器的网址是0.0.0.0.而网页又提供三个供用户访问的页面,分别是:
这三个页面的路径分别是/,/about,/my
使用 React Router 来配置上面例子中的三个页面,每个页面分别对应着一个 React Component:
/about 页面的入口文件 about.js
/my页面的入口文件my.js
/ 首页对应的是 app.js,它也是整个 React Component 的入口文件
app.js 中的 Link 组件是 React #Router 提供的组件,用于链接到相应页面。它和a标签实行的功能是一样的,但是a标签相当于整个页面的跳转,而 Link只是内部路由跳转,不需要重新加载整个页面。
index.js实现对 route 的配置,同时在该文件中对 React Component 进行 render。
默认首页的添加
上面代码中,访问根路径/,不会加载任何子组件。也就是说,App组件的this.props.children,这时是undefined。因此,通常会采用{this.props.children || <Home/>}这样的写法。这时,Home明明是About和My的同级组件,却没有写在Route中。IndexRoute就是解决这个问题,显式指定Home就是根路由的子组件,即指定默认情况下加载的子组件。你可以把IndexRoute想象成某个路径的index.html。如下写法、
嵌套路由
实际应用中,路由是分多个层级的。我们可以使用react-router的路由嵌套来清晰的管理路由和组件之间的切换展示。
当调用一个url时,React Router会优先对URL相匹配的路由进行深度遍历,渲染view。
路径匹配
:paramName:匹配一段位于 /、? 或 # 之后的 URL。 命中的部分将被作为一个参数
例:<Route path="/hello/:name">
// 匹配 /hello/michael
// 匹配 /hello/ryan
():在它内部的内容被认为是可选的, /即 ()内部的内容可有可无,都可以命中
* 匹配任意字符(非贪婪的)直到命中下一个字符或者整个 URL 的末尾,并创建一个 splat 参数
例: <Route path="/files/*.*"> 匹配 /files/hello.jpg 和 /files/path/to/hello.jpg