react ---- Router路由的使用和页面跳转
React-Router的中文文档可以参照如下链接:
http://react-guide.github.io/react-router-cn/docs/Introduction.html
首先,我们打开已经构建完成的React项目目录,本人采用的是VScode编辑器
我们删去src目录下的所有文件,创建index.js文件,内容如下:
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App'; ReactDOM.render(<App/>, document.getElementById('root'));
然后创建App.js文件,内容如下:
import React from 'react';
import { BrowserRouter as Router,Route} from 'react-router-dom';
import Home from './Home';
import Page1 from './Page1';
import Page2 from './Page2';
import Page3 from './Page3'; class App extends React.Component {
render(){
return(
<Router >
<div>
<Route path="/" component={Home} />
<Route path="/Page1" component={Page1} />
<Route path="/Page2" component={Page2} />
<Route path="/Page3" component={Page3} />
</div>
</Router>
)
}
}
export default App;
在上方的import中,载入了 BrowserRouter as Router 和 Route,其意思就是从react-router-dom 包中导入Router和Route,BrowserRouter是Router中的一种。
然后,下面依次引入了Home、Page1、Page2、Page3这四个组件,组件的内容之后会给出。
在组件的render函数的return里面,我们可以看到一对<Router>标签包含了四个<Route>标签,每个<Route>标签中都包含了path属性和component属性,path 属性用于储存路径,就是网站主页路径后面的内容,假如网站地址是localhost:3000,那么,locahost:3000后面的字符串就是path属性的内容。(注意,Router只能有一个子组件,所以要把所有Route标签用一个div包裹起来)
然后是 component 属性,其中储存了组件名称,当我们访问特定地址时就会渲染该组件,也可以称其为这一个路由的入口组件,可以由这个组件延伸开来搭建页面。
Home组件的内容如下(Home.js):
import React from 'react';
class Home extends React.Component{
render(){
return(
<div>
<div>This is Home!</div>
</div>
);
}
}
export default Home;
用于显示div标签中的This is Home!语句。
Page1-Page3组件类似,内容为:
import React from 'react';
class Page1 extends React.Component{
render(){
return(
<div>
<div>This is Page1!</div>
</div>
);
}
}
export default Page1;
然后我们就可以来尝试一下访问这些页面,比如,我们在浏览器地址栏中输入localhost:3000/
可以看到:

当我们访问 localhost:3000/Page1 的时候就会看到

这里会产生一个疑问,为什么我们访问 /Page1 路径的时候会渲染Home组件的内容。
这是因为Home组件所在路由的 path为 “/”,而“/Page1”开头包含了 “/”,React就会默认渲染Home组件。
如果想在访问其他地址时不显示Home组件,可以在Home组件所在Route标签中加入 exact ,如下:
<div>
<Route exact path="/" component={Home} />
<Route path="/Page1" component={Page1} />
这样一来,当我们访问 localhost:3000/Page1 时就不会默认渲染Home组件。
关于Page2、Page3的访问也是一样,现在为止,我们可以通过输入地址的方式进行访问,但依然不够方便,那么我们就要设置一些访问入口,也就是传统页面中“超链接”所在地。
我们在Home组件中做如下更改:
import React from 'react';
import { Link } from 'react-router-dom'; class Home extends React.Component{
render(){
return(
<div>
<div>This is Home!</div>
<div>
<Link to="/Page1/" style={{color:'black'}}>
<div>点击跳转到Page1</div>
</Link>
<Link to="/Page2/" style={{color:'black'}}>
<div>点击跳转到Page2</div>
</Link>
<Link to="/Page3/" style={{color:'black'}}>
<div>点击跳转到Page3</div>
</Link>
</div>
</div>
);
}
} export default Home;
首先,我们要在上方用 import 引入一个 Link组件,这个组件由react-router-dom内部定义,用于链接跳转,在render函数的return中设置3对Link标签,to后面填写Page1的地址(“/Page1/”、“/Page1”皆可),并包含跳转链接的文字。
(style是设置字体颜色样式,可加可不加,关于样式的设置以后的文章中会讲到)
现在,我们访问 localhost:3000/ 可以看到:
点击其中一个链接就可以跳转到特定的页面,比如Page1:

注意,这里的跳转并没有访问新的html文件,而是由React改变了原本html页面中的内容。
现在,我们已经成功地使用 Router、Route 和 Link 实现了React页面跳转的功能.
react ---- Router路由的使用和页面跳转的更多相关文章
- React学习(3)——Router路由的使用和页面跳转
React-Router的中文文档可以参照如下链接: http://react-guide.github.io/react-router-cn/docs/Introduction.html 文档中介绍 ...
- Vue 实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案
Vue实现动态路由及登录&404页面跳转控制&页面刷新空白解决方案 by:授客 QQ:1033553122 开发环境 Win 10 Vue 2.9.6 node-v ...
- < react router>: (路由)
< react router> (路由): 思维导图: Atrial 文件夹下的index.js 文件内容: import React, { Component } from 'rea ...
- React初识整理(四)--React Router(路由)
官网:https://reacttraining.com/react-router 后端路由:主要做路径和方法的匹配,从而从后台获取相应的数据 前端路由:用于路径和组件的匹配,从而实现组件的切换. 如 ...
- 【react router路由】<Router> <Siwtch> <Route>标签
博客 https://www.jianshu.com/p/ed5e56994f13?from=timeline 文档 http://react-guide.github.io/react-router ...
- vue路由守卫+cookie实现页面跳转时验证用户是否登录----(二)设置路由守卫
上一篇我们已经封装好了cookie方法,登录成功之后也可以吧用户信息存到cookie中,接下来需要在router/index.js中引入一下cookie.js文件 然后继续添加以下代码 /* * be ...
- react router路由传参
今天,我们要讨论的是react router中Link传值的三种表现形式.分别为通过通配符传参.query传参和state传参. ps:进入正题前,先说明一下,以下的所有内容都是在react-rout ...
- React Router路由传参方式总结
首先我们要知道一个前提,路由传递的参数我们可以通过props里面的属性来获取.只要组件是被<Router>组件的<component>定义和指派的,这个组件自然就有了props ...
- 关于js单页面实现跳转原理以及利用angularjs框架路由实现单页面跳转
还记得我们刚开始学习html时使用的锚节点实现跳转吗? <a href="#target">我想跳转至目标位置</a> <p>第一条</p ...
随机推荐
- java去除反复的字符串和移除不想要的字符串
在java开发中碰到了有些字符串是反复的,假设在进行业务处理要所有遍历太对的数据就会反复,所以在进行业务处理前进行一个去重操作. watermark/2/text/aHR0cDovL2Jsb2cuY3 ...
- Java生成验证码_转
为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下;这是一个web工程, ...
- 【Java】【Flume】Flume-NG启动过程源代码分析(一)
从bin/flume 这个shell脚本能够看到Flume的起始于org.apache.flume.node.Application类,这是flume的main函数所在. main方法首先会先解析sh ...
- 安卓通过OkHttp获取json数据
使用Http协议访问网络 OkHttp使用 可以很好的获取接口数据!json数据! 支持get和post提交方式!!! 1.引入模块 compile 'com.squareup.okhttp3:okh ...
- zzulioj--1708--01串也疯狂之光棍也有伴(dp)
1708: 01串也疯狂之光棍也有伴 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 199 Solved: 50 SubmitStatusWeb B ...
- 用exp命令按用户导出的DMP文件缺少表,某些表是空表
1.用以下这句查找空表并生成执行命令 select 'alter table '||table_name||' allocate extent;' from user_tables where num ...
- angular与angularjs常用指令的不同写法整理
angularjs与angular 常用的指令写法的区别; 一:angularjs指令 1.ng-bind 使用给定的变量或表达式的值来替换 HTML 元素的内容 <p ng-bind=&quo ...
- Linux就该这么学 20181007第十章Apache)
参考链接https://www.linuxprobe.com/ /etc/httpd/conf/httpd.conf 主配置文件 SElinux域 ---服务功能的限制 SElinux安全上下文 -- ...
- xBIM 基础15 IFC导出Excel报表
系列目录 [已更新最新开发文章,点击查看详细] IFC导出Excel空间报表文件 本篇将向您展示从IFC文件读取数据所需的一些概念.它使用IFC4接口,适用于IFC2x3和IFC4型号.要创建 ...
- gui编程实战——qq聊天界面1
public class testDemo_2 extends JFrame{ JTextArea jta=null; //多行文本框组件 JScrollPane jsp=null; //滚动文本框 ...