React是个技术栈,单单使用React很难构建复杂的Web应用程序,很多情况下我们需要引入其他相关的技术

React Router是React的路由库,保持相关页面部件与URL间的同步
下面就来简单介绍其基础使用,更全面的可参考 指南
1. 它看起来像是这样
在页面文件中
在外部脚本文件中
2. 库的引入
React Router库的引入,有两种方式
2.1 浏览器直接引入
可以引用 这里 的浏览器版本,或者下载之后引入
然后就可以直接使用 ReactRouter 这个对象了,我们可能会使用到其中的几个属性
let {Router, Route, IndexRoute, Redirect, IndexRedirect, Link, IndexLink, hashHistory, browserHistory} = ReactRouter;
2.2 npm 安装,通过构建工具编译引入
npm install --save react-router
安装好路由库之后,在脚本文件中引入相关属性
import {Router, Route, IndexRoute, Redirect, IndexRedirect, Link, IndexLink, hashHistory, browserHistory} from 'react-router';
因浏览器目前还不能支持import与export命令,且babel工具不会将require命令编译,所以我们还得需要如Webpack等构建工具编译引入
库引入之后,在ReactDOM的render方法中,就可以使用相关的组件了
3. 路由简单使用
最基本的,通过URL判断进入哪个页面(组件部件)
class First extends Component {
constructor(props) {
super(props);
}
render() {
return <p>First</p>
}
}
class Second extends Component {
constructor(props) {
super(props);
}
render() {
return <p>Second</p>
}
}
class App extends Component {
constructor(props) {
super(props);
}
render() {
return <div></div>
}
}
render((
<Router history={hashHistory}>
<Route path="/" component={App} />
<Route path="first" component={First} />
<Route path="second" component={Second} />
</Router>
),
document.getElementById('box')
);
首先,Router是一个容器,history属性定义了是用何种方式处理页面的URL
有三种:
然后,在容器中使用Route组件定义各个路由,通过path指定路径(可以看到,是不区分大小写的),通过component指定该路径使用的组件
也可以直接在Router容器上直接用routes属性定义各个路由,如
let routes =
<div>
<Route path="/" component={App} />
<Route path="first" component={First} />
<Route path="second" component={Second} />
</div>;
render(<Router routes={routes} history={hashHistory}></Router>, document.getElementById('box'));
需要注意的是{routes}中只能有一个父级,所以这里加了<div>标签
另外,路由Route也可以嵌套,在上面的例子中,嵌套起来可能更符合实际情况
需要注意的是,这里的App在父级,为了获取子级的First与Second组件,需要在App组件中添加 this.props.children 获取
class App extends Component {
constructor(props) {
super(props);
}
render() {
return <div>{this.props.children}</div>
}
}
render((
<Router history={hashHistory}>
<Route path="/" component={App}>
<Route path="first" component={First} />
<Route path="second" component={Second} />
</Route>
</Router>
),
document.getElementById('box')
);
同样的,可以直接在Router中用routes属性定义路由
let routes =
<Route path="/" component={App}>
<Route path="first" component={First} />
<Route path="second" component={Second} />
</Route>;
render(<Router routes={routes} history={hashHistory}></Router>, document.getElementById('box'));
4. 路由的其他组件
除了基本的Route之外,IndexRoute、Redirect、IndexRedirect、Link、IndexLink等,顾名思义
class First extends Component {
constructor(props) {
super(props);
}
render() {
return (
<p>First
<IndexLink to="/" activeStyle={{color: 'red'}}>Basic</IndexLink>
</p>
)
}
}
class Second extends Component {
constructor(props) {
super(props);
}
render() {
return <p>Second</p>
}
}
class Basic extends Component {
constructor(props) {
super(props);
}
render() {
return (
<ul role="nav">
<li><IndexLink to="/" activeStyle={{color: 'red'}}>Basic</IndexLink></li>
<li><Link to="/first" activeStyle={{color: 'red'}}>First</Link></li>
<li><Link to="/Second" activeClass="active">Second</Link></li>
</ul>
)
}
}
class App extends Component {
constructor(props) {
super(props);
}
render() {
return <div>
{this.props.children}
</div>
}
}
render((
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Basic} />
<Route path="first" component={First} />
<Route path="second" component={Second} />
</Route>
</Router>
),
document.getElementById('box')
);
render((
<Router history={hashHistory}>
<Route path="/" component={App}>
<IndexRoute component={Basic} />
<IndexRedirect to="first" />
<Redirect from="second" to="first" />
<Route path="first" component={First} />
<Route path="second" component={Second} />
</Route>
</Router>
),
document.getElementById('box')
);
5. 路由的path规则
path定义的路由的路径,在hashHistory中,它的主页路径是 #/
自定义Route路由通过与父Route的path进行合并,在与主页路径合并,得到最终的路径
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="/**/*.jpg"> // 匹配 /files/hello.jpg 和 /files/path/to/file.jpg
而:name可以通过 this.props.params 中取到
class First extends Component {
constructor(props) {
super(props);
}
render() {
return (
<p>First {this.props.params.name}
<IndexLink to="/" activeStyle={{color: 'red'}}>Basic</IndexLink>
</p>
)
}
}
.
.
<Route path="/:name" component={First} />
通过React Dev Tool也可以看到组件的相关数据
6. 路由的onEnter、onLeave钩子
在路由的跳转中,我们可能需要在进入页面或离开页面的时候做一些特殊操作,Route 通过 onEnter 与 onLeave 定义了这两个行为
<Route path="first" component={First} onEnter={(nextState, replace) => {
console.log(nextState);
alert('onEnter');
// replace('second');
}} onLeave={() => {
alert('onLeave');
}}/>
如上,带两个参数,通过 replace 可以更新路径,把注释去掉后,进入"/first"时立马跳转值"/second",这在检测登录时应该比较有用
更多的使用参见 指南
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# React
# Router
# 无废话快速上手React路由开发
# React Native 混合开发多入口加载方式详解
# 详解使用webpack+electron+reactJs开发windows桌面应用
# 详解React开发必不可少的eslint配置
# react基础知识总结
# react以create-react-app为基础创建项目
# 初识React及React开发依赖详解
# 的是
# 可以直接
# 可以看到
# 跳转
# 需要注意
# 重定向
# 是一个
# 几个
# 是个
# 还可以
# 很难
# 它是
# 这两个
# 可以通过
# 自定义
# 还得
# 实际情况
# 可选
# 会使
# 顾名思义
相关文章:
沈阳制作网站公司排名,沈阳装饰协会官方网站?
香港服务器租用每月最低只需15元?
文字头像制作网站推荐软件,醒图能自动配文字吗?
无锡营销型网站制作公司,无锡网选车牌流程?
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
青岛网站建设如何选择本地服务器?
宝塔新建站点为何无法访问?如何排查?
如何用已有域名快速搭建网站?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
如何快速搭建虚拟主机网站?新手必看指南
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
如何用花生壳三步快速搭建专属网站?
如何用好域名打造高点击率的自主建站?
广州建站公司哪家好?十大优质服务商推荐
如何在阿里云高效完成企业建站全流程?
黑客如何利用漏洞与弱口令入侵网站服务器?
如何零基础在云服务器搭建WordPress站点?
装修招标网站设计制作流程,装修招标流程?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
如何彻底卸载建站之星软件?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
建站主机与服务器功能差异如何区分?
高端网站建设与定制开发一站式解决方案 中企动力
定制建站流程解析:需求评估与SEO优化功能开发指南
制作营销网站公司,淘特是干什么用的?
如何在Tomcat中配置并部署网站项目?
兔展官网 在线制作,怎样制作微信请帖?
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
,网站推广常用方法?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
七夕网站制作视频,七夕大促活动怎么报名?
常州企业网站制作公司,全国继续教育网怎么登录?
如何挑选优质建站一级代理提升网站排名?
如何快速搭建高效WAP手机网站?
制作销售网站教学视频,销售网站有哪些?
建站之星与建站宝盒如何选择最佳方案?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
魔方云NAT建站如何实现端口转发?
建站之星如何快速解决建站难题?
如何在景安服务器上快速搭建个人网站?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
代购小票制作网站有哪些,购物小票的简要说明?
定制建站如何定义?其核心优势是什么?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何续费美橙建站之星域名及服务?
*请认真填写需求信息,我们会在24小时内与您取得联系。