我的编程空间,编程开发者的网络收藏夹
学习永远不晚

初试ReactRouterv4 要注意什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

初试ReactRouterv4 要注意什么

初试ReactRouterv4 要注意什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

距离React Router v4 正式发布也已经过去三个月了,这周把一个React的架子做了升级,之前的路由用的还是v2.7.0版的,所以决定把路由也升级下,正好“尝尝鲜”...

江湖传言,目前官方同时维护 2.x 和 4.x 两个版本。(ヾ(。ꏿ﹏ꏿ)ノ゙咦,此刻相信机智如我的你也会发现,ReactRouter v3 去哪儿了?整丢了??巴拉出锅了???敢不敢给我个完美的解释!?)事实上 3.x 版本相比于 2.x 并没有引入任何新的特性,只是将 2.x 版本中部分废弃 API 的 warning 移除掉而已。按照规划,没有历史包袱的新项目想要使用稳定版的 ReactRouter 时,应该使用 ReactRouter 3.x。目前 3.x 版本也还处于 beta 阶段,不过会先于 4.x 版本正式发布。如果你已经在使用 2.x 的版本,那么升级 3.x 将不会有任何额外的代码变动。

礼貌性简介下

初试ReactRouterv4 要注意什么

React Router V4 相较于前面三个版本有根本性变化,首先是遵循 Just Component 的 API 设计理念,其次API方面也精简了不少,对新手来说降低了学习难度,但如果是对之前项目的重构,嗯,简直无**可说。本次升级的主要特点如下:

  • 声明式(Declarative)

  • 可组合 (Composability)

React Router V4 遵循了 React 的理念: 万物皆组件 。因此 升级之后的 Route、Link、Switch等都是一个普通的组件。

React Router V4 基于 Lerna 管理多个 Repository。在此代码库包括:

  1. react-router React Router 核心

  2. react-router-dom 用于 DOM 绑定的 React Router

  3. react-router-native 用于 React Native 的 React Router

  4. react-router-redux React Router 和 Redux 的集成

  5. react-router-config 静态路由配置帮助助手

插件初引入

通常我们在 React 的使用中,一般要引入两个包, react 和  react-dom ,那么 react-routerreact-router-dom 是不是两个都要引用呢? 注意,前方高能,入门第一坑就在这里 。他们两个只要引用一个就行了,不同之处就是后者比前者多出了 <Link> <BrowserRouter> 这样的 DOM 类组件。因此我们只需引用 react-router-dom 这个包就OK了。当然,如果搭配 redux ,你还需要使用 react-router-redux

主要组件简介

在4.0之前版本的 API 中, <Router> 组件的 children 只能是 React Router 提供的各种组件,如 <Route>、<IndexRoute>、<Redirect> 等。而在 React Router 4 中,你可以将各种组件及标签放进 <Router> 组件中,他的角色也更像是 Redux 中的 <Provider> 。**不同的是 <Provider> 是用来保持与 store 的更新,而 <Router> 是用来保持与 location 的同步。**示例如下:

// 示例1
<Router>
 <div>
  <ul>
  <li><Link to="/">首页</Link></li>
  <li><Link to="/about">关于</Link></li>
  <li><Link to="/topics">主题列表</Link></li>
  </ul>

  <hr/>

  <Route exact path="/" component={Home}/>
  <Route path="/about" component={About}/>
  <Route path="/topics" component={Topics}/>
 </div>
 </Router>

Router是所有路由组件共用的底层接口,一般我们的应用并不会使用这个接口,而是使用高级的路由:

  1. <BrowserRouter> :使用 HTML5 提供的 history API 来保持 UI 和 URL 的同步;

  2. <HashRouter> :使用 URL 的 hash (例如:window.location.hash) 来保持 UI 和 URL 的同步;

  3. <MemoryRouter> :能在内存保存你 “URL” 的历史纪录(并没有对地址栏读写);

  4. <NativeRouter> :为使用React Native提供路由支持;

  5. <StaticRouter> :从不会改变地址;

TIPS:算是第二坑吧,和之前的Router不一样,这里 <Router> 组件下只允许存在一个子元素,如存在多个则会报错。

反面典型在这里:

<Router>
  <ul>
  <li><Link to="/">首页</Link></li>
  <li><Link to="/about">关于</Link></li>
  <li><Link to="/topics">主题列表</Link></li>
  </ul>

  <hr/>

  <Route exact path="/" component={Home}/>
  <Route path="/about" component={About}/>
  <Route path="/topics" component={Topics}/>
 </Router>

没错,示例2在没有 <div> 爸爸的保护下,会报如下异常信息:

初试ReactRouterv4 要注意什么

我们知道,Route组件主要的作用就是当一个location匹配路由的path时,渲染某些UI。示例如下:

<Router>
 <div>
 <Route exact path="/" component={Home}/>
 <Route path="/news" component={NewsFeed}/>
 </div>
</Router>

// 如果应用的地址是/,那么相应的UI会类似这个样子:
<div>
 <Home/>
</div>

// 如果应用的地址是/news,那么相应的UI就会成为这个样子:
<div>
 <NewsFeed/>
</div>

<Route> 组件有如下属性:

  1. path(string): 路由匹配路径。(没有path属性的Route 总是会 匹配);

  2. exact(bool):为true时,则要求路径与location.pathname必须完全匹配;

  3. strict(bool):true的时候,有结尾斜线的路径只能匹配有斜线的location.pathname;

再次奉上两个鲜活的例子:

exact配置:


路径location.pathnameexact是否匹配
/one/one/twotrue
/one/one/twofalse

 strict配置:

路径location.pathnamestrict是否匹配
/one//onetrue
/one//one/true
/one//one/twotrue

同时,新版的路由为 <Route> 提供了三种渲染内容的方法:

  1. <Route component> :在地址匹配的时候React的组件才会被渲染,route props也会随着一起被渲染;

  2. <Route render> :这种方式对于内联渲染和包装组件却不引起意料之外的重新挂载特别方便;

  3. <Route children> :与render属性的工作方式基本一样,除了它是不管地址匹配与否都会被调用;

第一种方式没啥可说的,和之前一样,这里我们重点看下 <Route render> 的渲染方式:

// 行内渲染示例
<Route path="/home" render={() => <div>Home</div>}/>

// 包装/合成
const FadingRoute = ({ component: Component, ...rest }) => (
 <Route {...rest} render={props => (
 <FadeIn>
  <Component {...props}/>
 </FadeIn>
 )}/>
)

<FadingRoute path="/cool" component={Something}/>

TIPS: 第三坑! <Route component> 的优先级要比 <Route render> 高,所以不要在同一个 <Route> 中同时使用这两个属性。

和之前版本没太大区别,重点看下组件属性:

  1. to(string/object):要跳转的路径或地址;

  2. replace(bool): 为 true 时 ,点击链接后将使用新地址替换掉访问历史记录里面的原地址; 为 false 时 ,点击链接后将在原有访问历史记录的基础上添加一个新的纪录。 默认为 false

示例如下:

// Link组件示例

// to为string
<Link to="/about">关于</Link>

// to为obj
<Link to={{
 pathname: '/courses',
 search: '?sort=name',
 hash: '#the-hash',
 state: { fromDashboard: true }
}}/>

// replace 
<Link to="/courses" replace />

<NavLink><Link> 的一个特定版本, 会在匹配上当前 URL 的时候会给已经渲染的元素添加样式参数,组件属性:

  1. activeClassName(string):设置选中样式,默认值为 active;

  2. activeStyle(object):当元素被选中时, 为此元素添加样式;

  3. exact(bool):为 true 时, 只有当地址完全匹配 class 和 style 才会应用;

  4. strict(bool):为 true 时,在确定位置是否与当前 URL 匹配时,将考虑位置 pathname 后的斜线; isActive(func):判断链接是否激活的额外逻辑的功能;

从这里我们也可以看出,新版本的路由在组件化上面确实下了不少功夫,来看看NavLink的使用示例:

// activeClassName选中时样式为selected
<NavLink
 to="/faq"
 activeClassName="selected"
>FAQs</NavLink>

// 选中时样式为activeStyle的样式设置
<NavLink
 to="/faq"
 activeStyle={{
 fontWeight: 'bold',
 color: 'red'
 }}
>FAQs</NavLink>

// 当event id为奇数的时候,激活链接
const oddEvent = (match, location) => {
 if (!match) {
 return false
 }
 const eventID = parseInt(match.params.eventID)
 return !isNaN(eventID) && eventID % 2 === 1
}

<NavLink
 to="/events/123"
 isActive={oddEvent}
>Event 123</NavLink>

该组件用来渲染匹配地址的第一个 <Route> 或者 <Redirect> 。那么它与使用一堆route又有什么区别呢?

<Switch> 的独特之处是独它仅仅渲染一个路由。相反地,每一个包含匹配地址(location)的 <Route> 都会被渲染。思考下面的代码:

<Route path="/about" component={About}/>
<Route path="/:user" component={User}/>
<Route component={NoMatch}/>

如果现在的URL是 /about ,那么 <About> , <User> , 还有 <NoMatch> 都会被渲染,因为它们都与路径(path)匹配。这种设计,允许我们以多种方式将多个 <Route> 组合到我们的应用程序中,例如侧栏(sidebars),面包屑(breadcrumbs),bootstrap tabs等等。 然而,偶尔我们只想选择一个 <Route> 来渲染。如果我们现在处于 /about ,我们也不希望匹配 /:user (或者显示我们的 “404” 页面 )。以下是使用 Switch 的方法来实现:

<Switch>
 <Route exact path="/" component={Home}/>
 <Route path="/about" component={About}/>
 <Route path="/:user" component={User}/>
 <Route component={NoMatch}/>
</Switch>

现在,如果我们处于 /about<Switch> 将开始寻找匹配的 <Route><Route path="/about"/> 将被匹配, <Switch> 将停止寻找匹配并渲染 <About> 。同样,如果我们处于 /michael<User> 将被渲染。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

初试ReactRouterv4 要注意什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

初学J2ME需要注意什么

这篇文章主要讲解了“初学J2ME需要注意什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“初学J2ME需要注意什么”吧!  下面请看一段代码:  /*   * ImageItemDemo.j
2023-06-03

html5测试需要注意什么

这篇文章主要介绍“html5测试需要注意什么”,在日常操作中,相信很多人在html5测试需要注意什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html5测试需要注意什么”的疑惑有所帮助!接下来,请跟着小编
2023-06-05

HCNA考试报名要注意什么?

  HCNA考试报名时间是什么时候?参加考试怎么报名?有什么注意事项?今天编程学习网小编猜有不少学员都充满了疑问。接下来就由编程学习网小编为大家一一解答。都是重点!一定要认真看哦!  首先编程学习网小编为大家介绍一下HCNA的考试时间。HCNA不同于每年日期都一样的高考,不会有令人紧张的倒计时,各位学生想什么时候考试就什么时候考试
HCNA考试报名要注意什么?
2024-04-18

java初始化数组赋值要注意什么

在Java中,初始化数组并赋值时需要注意以下几点:确定数组的类型和大小:首先要确定所需数组的类型和大小。数组的大小可以是固定的,也可以根据需要动态分配。使用关键字new来创建数组对象:使用关键字new来创建数组对象,并指定数组的大小。例如,
2023-10-27

美国cn2 vps试用要注意什么

1. 测试期限:在试用cn2 vps之前,需要了解试用的时间限制,以免超过试用期限而被收费。2. 服务质量:试用前需要了解服务商的服务质量,例如网络稳定性、带宽速度、数据中心位置等,以确保服务能够满足实际需求。3. 安全性:在试用cn2 v
2023-06-14

shopex虚拟主机试用要注意什么

1. 确认虚拟主机的资源配置是否满足自己的需求,包括存储空间、流量、CPU、内存等。2. 确认虚拟主机的安全性,包括服务器硬件防护、网络安全防护、数据备份等。3. 确认虚拟主机的稳定性,包括服务器运行稳定性、网络稳定性、数据传输稳定性等。4
2023-06-14

免费香港vps试用要注意什么

免费香港vps试用要注意:1、香港vps的质量是否较好,可以使用PING、TRACERT命令来判断;2、香港vps的稳定性是否有保障,是否能保证网站的正常运行;3、香港vps售后技术支持服务是否完善,是否能第一时间解决售后问题,保证vps能
2023-02-08

国内免费vps试用要注意什么

1. 选择正规的VPS服务商,确保账户安全和数据隐私安全。2. 了解免费VPS试用的使用时间和服务内容,避免超时或被限制使用。3. 确认VPS的配置和性能是否满足自己的需求,避免使用体验不佳。4. 注意免费VPS试用的使用限制和流量限制,避
2023-06-17

云主机性能测试要注意什么

云主机性能测试注意事项明确测试目标,选择合适的工具,合理配置测试脚本。优化测试环境,递增负载测试,监控关键指标。分析测试结果,调整云主机配置。模拟实际场景,多维度测试,持续优化。确保全面评估云主机性能,优化性价比和满足业务需求。
云主机性能测试要注意什么
2024-04-09

虚拟空间免费试用要注意什么

虚拟空间免费试用要注意:1、品质问题,使用PING、TRACERT命令来判断网络的稳定性是否较好;2、稳定性问题,选择稳定性好的虚拟空间,保证网站的正常运行;3、售后服务问题,看服务商处理问题的速度是否较快,是否能保证虚拟空间的正常使用。具
2023-02-13

免费vps加速器试用要注意什么

1、安全性选择可信赖的加速器服务商,确保其有完善的安全措施,防止数据泄露和网络攻击等问题。2、速度选择速度较快的加速器,以获得更好的加速效果。3、稳定性选择稳定性较高的加速器,避免出现频繁断线等问题。4、流量限制注意加速器是否有流量限制,以
2023-05-31

试用云服务器要注意什么问题

使用云服务器时,需要注意以下问题:安全性:确保云服务器的安全性,包括设置强密码、定期更新操作系统和应用程序、安装防火墙和安全补丁等措施。数据备份:定期备份数据以防止意外数据丢失,可以选择云服务商提供的备份服务或自行设置备份计划。资源管理:监
试用云服务器要注意什么问题
2024-05-06

云服务器试用要注意什么问题

选择可靠的服务商:选择有信誉和口碑的云服务器服务商,避免因服务商的不稳定或不可靠导致服务器无法正常运行。规划好资源需求:在试用云服务器之前,需要明确自己的资源需求,包括CPU、内存、存储等,以便选择适合自己需求的云服务器配置。注意安全性:在
云服务器试用要注意什么问题
2024-05-10

日本vps云主机试用要注意什么

试用日本VPS云主机时,需要注意以下几点:1、了解试用期限不同的 VPS 云主机提供商试用期限不同,有的只提供1-3天的试用,有的可以试用一个月或更长时间。在试用前,一定要了解试用期限,以便您能够在规定时间内测试和评估 VPS 云主机的性能
2023-03-19

初学Java要注意哪些内容

本篇内容主要讲解“初学Java要注意哪些内容”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“初学Java要注意哪些内容”吧!  一般来说安装完JDK之后,一定要按一下步骤配置,才可正确编译运行(假
2023-06-03

注册域名需要注意什么

本篇内容介绍了“注册域名需要注意什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一,域名注册商的时候,要了解该注册的品牌。尽量挑选老练,
2023-06-06

美国免费主机cn2试用要注意什么

使用美国免费主机cn2试用时需要注意以下几点:1、检查安全性首先要检查主机的安全性,以确保服务器的安全性不受到破坏。2、检查网络连接其次要检查主机的网络连接,以确保可以正常上网。3、测试效能再次要测试主机的效能,以确保服务能够稳定运行。4、
2023-03-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录