react路由,4.x的差异还是比较大,暂时还是3.x的版本

安装:

npm install -S react-router@3.x

配置:

import { Router, Route, hashHistory } from 'react-router';

<Router history={hashHistory}>{/*browserHistory、hashHistory、createMemoryHistory*/}
<Route exact path="/" component={App}> {/*exact 表示精确匹配*/}
<IndexRoute component={Home}/>{/*显式指定Home是根路由的子组件,即指定默认情况下加载的子组件。*/}
<IndexRedirect to="/welcome" />{/*IndexRedirect组件用于访问根路由的时候,将用户重定向到某个子组件。*/}
<Route path="welcome" component={Welcome} />
<Route path="/repos" component={Repos}/>
<Route path="/about/(:id)" component={About}/>
<Route path="inbox" component={Inbox}>
{/*<Redirect>组件用于路由的跳转,即用户访问一个路由,会自动跳转到另一个路由。*/}
{/* 从 /inbox/messages/:id 跳转到 /messages/:id */}
{/* :id 获取-> this.props.params.id*/}
<Redirect from="messages/:id" to="/messages/:id" />
</Route>
</Route>
   <Route path="*" component={Page404}></Route>
</Router>

app组件:

export default React.createClass({
 let baseUrl = this.props.match.url;{/*获得当前路由,即 / ,对于页面可维护性是十分重要的*/}
render() {
return (
<div>
<ul role="nav">
<IndexLink to="/" activeClassName="active">Home</IndexLink>{/*默认页*/}
<li><Link to=`/${baseUrl}/about` activeStyle={{color: 'red'}}>About</Link></li>
<li><Link to="/repos" activeClassName="active">Repos</Link></li>
         <li><Link to={{ pathname: '/hello', query: { name: 'ryan' } }}> Hello </Link></li>
         <li><Link to={`/my/${myId}/info`}>点击</Link></li>
         <li><Link to={{pathname:"/select", hash:'#ahash', query:{foo: 'bar', boo:'boz'}, state:{data:'miao'} }} activeClassName="GlobalNav-active">精选</Link></li>
</ul>
<div>
{this.props.children} {/*this.props.children属性就是子组件*/}
</div>
</div>
)
}
})

path属性:

<Route path="/hello/:name">
// 匹配 /hello/michael
// 匹配 /hello/ryan <Route path="/hello(/:name)">
// 匹配 /hello
// 匹配 /hello/michael
// 匹配 /hello/ryan <Route path="/files/*.*">
// 匹配 /files/hello.jpg
// 匹配 /files/hello.html <Route path="/files/*">
// 匹配 /files/
// 匹配 /files/a
// 匹配 /files/a/b <Route path="/**/*.jpg">
// 匹配 /files/hello.jpg
// 匹配 /files/path/to/file.jpg

path属性也可以使用相对路径(不以/开头),匹配时就会相对于父组件的路径。路由匹配规则是从上到下执行,一旦发现匹配,就不再其余的规则了。

编程式导航:

hashHistory

import { hashHistory } from 'React-router'
... ...
hashHistory.push('mine')
//传参
hashHistory.push({
pathname: 'good/details/'+this.state.id,//与路由表中配置相对应,
query: {
title:value.title,
name:value.name
},
})   
... ...

接收参数:

this.props.params.id

this.props.location.query.title
this.props.location.query.name

此外:

browserHistory

import { browserHistory } from 'react-router';
... ...
browserHistory.push('/some/path');

context对象

class Example extends React.Component {
constructor(props, context) {
super(props, context);
this.context.router; // it works
}
... ...
handleSubmit(event) {
this.context.router.push(path)
},
}
//必须显示声明
Example.contextTypes = {
router: React.PropsTypes.object
}

路由钩子:

onEnter与onLeave

onEnter钩子替代<Redirect>组件。

<Route path="inbox" component={Inbox}>
<Route
path="messages/:id"
onEnter={
({params}, replace) => replace(`/messages/${params.id}`)
}
/>
</Route>

onEnter钩子还可以用来做认证。

const requireAuth = (nextState, replace) => {
if (!auth.isAdmin()) {
// Redirect to Home page if not an Admin
replace({ pathname: '/' })
}
}
export const AdminRoutes = () => {
return (
<Route path="/admin" component={Admin} onEnter={requireAuth} />
)
}

当用户离开一个路径的时候,跳出一个提示框,要求用户确认是否离开。

const Home = withRouter(
React.createClass({
componentDidMount() {
this.props.router.setRouteLeaveHook(
this.props.route,
this.routerWillLeave
)
}, routerWillLeave(nextLocation) {
// 返回 false 会继续停留当前页面,
// 否则,返回一个字符串,会显示给用户,让其自己决定
if (!this.state.isSaved)
return '确认要离开?';
},
})
)

上面代码中,setRouteLeaveHook方法为Leave钩子指定routerWillLeave函数。该方法如果返回false,将阻止路由的切换,否则就返回一个字符串,提示用户决定是否要切换。

react 路由 react-router@3.2.1的更多相关文章

  1. react第十四单元(react路由-react路由的跳转以及路由信息)

    第十四单元(react路由-react路由的跳转以及路由信息) #课程目标 理解前端单页面应用与多页面应用的优缺点 理解react路由是前端单页面应用的核心 会使用react路由配置前端单页面应用框架 ...

  2. react第十三单元(react路由-react路由的跳转以及路由信息) #课程目标

    第十三单元(react路由-react路由的跳转以及路由信息) #课程目标 熟悉掌握路由的配置 熟悉掌握跳转路由的方式 熟悉掌握路由跳转传参的方式 可以根据对其的理解封装一个类似Vue的router- ...

  3. 【React 8/100】 React路由

    React路由 React路由介绍 现代的前端应用大多数是SPA(单页应用程序),也就是只有一个HTML页面的应用程序.因为它的用户体验更好.对服务器压力更小,所以更受欢迎.为了有效的使用单个页面来管 ...

  4. react路由配置(未完)

    React路由 React推了两个版本 一个是react-router 一个是react-router-dom 个人建议使用第二个 因为他多了一个Link组件 Npm install react-ro ...

  5. react router @4 和 vue路由 详解(七)react路由守卫

    完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 12.react路由守卫? a.在之前的版本中,React Router 也提供了类似的 ...

  6. 【react router路由】<Router> <Siwtch> <Route>标签

    博客 https://www.jianshu.com/p/ed5e56994f13?from=timeline 文档 http://react-guide.github.io/react-router ...

  7. react路由案例(非常适合入门)

    前面已经已经讲过一次路由   稍微有些复杂   考虑到有些同学刚接触到   我准备了一个简单的demo   就当自己也顺便复习一下 data.js const data = [ { name: 'Ta ...

  8. react路由深度解析

    先看一段代码能否秒懂很重要 这是app.js  全局js的入口 import React from 'react' import { render } from 'react-dom' import ...

  9. react路由的安装及格式和使用方法

    react路由的安装: 在要创建项目的目录命令窗里输入: cnpm install -g create-react-app create-react-app  项目名 在创建好的项目目录命令窗里输入: ...

  10. react 路由导航栏 withRouter

    codesandbox https://codesandbox.io/s/9l6prnyxjy app.js import React, { Component, Fragment } from &q ...

随机推荐

  1. JavaSE-28 hashCode()方法、equals()方法和==相关概念

    概述 Java中,Object类是所有类的基类:如果一个类没有明确继承其他已定义的类,则默认继承Object类. Object类提供了以下方法,对于其他方法,请参考前期专题描述. hashCode() ...

  2. java中等待所有线程都执行结束

    转自:http://blog.csdn.net/liweisnake/article/details/12966761 今天看到一篇文章,是关于java中如何等待所有线程都执行结束,文章总结得很好,原 ...

  3. TWaver3D直线、曲线、曲面的绘制

    插播一则广告(长期有效) TWaver需要在武汉招JavaScript工程师若干 要求:对前端技术(JavasScript.HTML.CSS),对可视化技术(Canvas.WebGL)有浓厚的兴趣 基 ...

  4. FFT NTT 模板

    NTT: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; # ...

  5. JavaScript:对Object对象的一些常用操作总结

    JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...

  6. ArrayList集合的增删改查方法

    新建一个myArrayList项目 在myArrayList项目下创建一个包 包中创建一个ArrayListDemo2.java文件 ArrayListDemo2.java import java.u ...

  7. .NET Core 文件的上传与下载

    1.前言 文件导入导出是简单且常用的功能,以下示例实现了文件上传与下载的几种方法,如有不妥的地方,欢迎指正.小白一枚,在往目标前进. 2.1.文件上传    --    纯文件 <form ac ...

  8. AI学习笔记(01)

    [1]在Ai中,每个对象有两个属性:填充颜色和描边颜色.   [2]在AI中,非要选中,才操作.而PS中,选中图层即可.   [3]AI中,都是路径.   [4]选择工具是选中整个路径,而直接选择工具 ...

  9. Fidder详解-抓取HTTPS清求(Web/App)抓包分析(靠谱篇)

    为什么要学Fidder抓包? 学习接口,必须要学http协议,不要求您对协议的掌握有多深.只是希望你能够了解什么是协议.协议的报文.状态码等等!本文通过抓包工具Fidder带你进入接口的大门.我们通过 ...

  10. powerdesigner批量导出sql