React Router v4 入坑指南

这篇文章主要介绍了react router v4 入坑指南(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

距离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 将不会有任何额外的代码变动。

礼貌性简介下

React Router v4 入坑指南

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

声明式(Declarative)

可组合 (Composability)

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

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

react-router React Router 核心

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

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

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

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

插件初引入

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

主要组件简介

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

// 示例1 

  

      
  • 首页
  •   
  • 关于
  •   
  • 主题列表
  •   
  
        

登录后复制

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

:使用 HTML5 提供的 history API 来保持 UI 和 URL 的同步;

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

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

:为使用React Native提供路由支持;

:从不会改变地址;

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

反面典型在这里:

  
      
  • 首页
  •   
  • 关于
  •   
  • 主题列表
  •   
  
       

登录后复制

没错,示例2在没有

爸爸的保护下,会报如下异常信息:

React Router v4 入坑指南

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

 

   

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

 

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

 

登录后复制

组件有如下属性:

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

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

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

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

exact配置:

路径 location.pathname exact 是否匹配

/one/one/twotrue否/one/one/twofalse是

 strict配置:

路径 location.pathname strict 是否匹配

/one//onetrue否/one//one/true是/one//one/twotrue是

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

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

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

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

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

// 行内渲染示例 

Home

}/>// 包装/合成const FadingRoute = ({ component: Component, ...rest }) => (  (     )}/>)

登录后复制

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

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

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

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

示例如下:

// Link组件示例// to为string关于// to为obj// replace 

登录后复制

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

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

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

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

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

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

// activeClassName选中时样式为selectedFAQs// 选中时样式为activeStyle的样式设置FAQs// 当event id为奇数的时候,激活链接const oddEvent = (match, location) => { if (!match) { return false } const eventID = parseInt(match.params.eventID) return !isNaN(eventID) && eventID % 2 === 1}Event 123

登录后复制

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

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

登录后复制

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

    

登录后复制

现在,如果我们处于 /about , 将开始寻找匹配的 。 将被匹配, 将停止寻找匹配并渲染 。同样,如果我们处于 /michael , 将被渲染。

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

AJAX封装类使用指南

Ajax中浏览器和服务器交互详解

AJAX初级教程之初识AJAX

以上就是React Router v4 入坑指南的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2756446.html

(0)
上一篇 2025年3月8日 07:38:52
下一篇 2025年3月8日 03:04:01

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Angular 5.x 学习笔记之Router(路由)应用

    本篇文章主要介绍了angular 5.x 学习笔记之router(路由)应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 序言: Angular APP 视图之间的跳转,依赖于 Router (路由),这一章…

    2025年3月8日
    200
  • 怎样使用React高阶组件

    这次给大家带来怎样使用React高阶组件,使用React高阶组件的注意事项有哪些,下面就是实战案例,一起来看一下。 前段时间在工作中写Hybrid页面时遇到了这样的一个场景,公司需要一系列的活动组件,在每个组件注册的时候都需要调用App端提…

    2025年3月8日
    200
  • 简单介绍react redux的中间件的使用

    这篇文章主要介绍了简单介绍redux的中间件的使用,现在分享给大家,也给大家做个参考。 用过react的同学都知道在redux的存在,redux就是一种前端用来存储数据的仓库,并对改仓库进行增删改查操作的一种框架,它不仅仅适用于react,…

    2025年3月8日 编程技术
    200
  • 从零开始使用React Router v4

    这次给大家带来从零开始使用React Router v4,从零开始使用React Router v4的注意事项有哪些,下面就是实战案例,一起来看一下。 江湖传言,目前官方同时维护 2.x 和 4.x 两个版本。(ヾ(。ꏿ﹏ꏿ)ノ゙咦,此刻相…

    2025年3月8日
    200
  • 如何使用Angular内Router(路由)应用

    这次给大家带来如何使用Angular内Router(路由)应用,使用Angular内Router(路由)应用的注意事项有哪些,下面就是实战案例,一起来看一下。 序言: Angular APP 视图之间的跳转,依赖于 Router (路由),…

    2025年3月8日
    200
  • React Native悬浮按钮组件的示例代码

    本篇文章主要介绍了react native悬浮按钮组件的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 React Native悬浮按钮组件:react-native-a…

    2025年3月8日
    200
  • 怎样使用react redux中间件

    这次给大家带来怎样使用react redux中间件,使用react redux中间件的注意事项有哪些,下面就是实战案例,一起来看一下。 用过react的同学都知道在redux的存在,redux就是一种前端用来存储数据的仓库,并对改仓库进行增…

    2025年3月8日 编程技术
    200
  • 怎样使用React Native做出悬浮按钮组件

    这次给大家带来怎样使用React Native做出悬浮按钮组件,使用React Native做出悬浮按钮组件的注意事项有哪些,下面就是实战案例,一起来看一下。 React Native悬浮按钮组件:react-native-action-b…

    2025年3月8日
    200
  • Angular4学习笔记router的简单使用

    本篇文章主要介绍了angular4学习笔记router的简单使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 router,也就是路由,是前端中一个比较重要的概念。通过router把特定的地址和对应的页面关联…

    2025年3月8日 编程技术
    200
  • 如何对vue传参与router使用

    这次给大家带来如何对vue传参与router使用,对vue传参与router使用的注意事项有哪些,下面就是实战案例,一起来看一下。 vue传参方法一 1,路由配置 { path: ‘/describe/:id’, name: ‘Descri…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论