从零开始使用React Router v4

这次给大家带来从零开始使用React Router v4,从零开始使用React Router v4的注意事项有哪些,下面就是实战案例,一起来看一下。

江湖传言,目前官方同时维护 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提供路由支持;

StaticRouter> :从不会改变地址;

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 , 将被渲染。

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

如何正确解决Vue 项目中遇到跨域问题

怎样使用vue-cli axios请求方式及跨域处理

以上就是从零开始使用React Router v4的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月8日 07:29:36
下一篇 2025年2月24日 09:44:24

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

相关推荐

  • 如何使用Angular内Router(路由)应用

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

    2025年3月8日
    200
  • 怎样正确使用vuex项目结构目录与配置

    这次给大家带来怎样正确使用vuex项目结构目录与配置,使用vuex项目结构目录与配置的注意事项有哪些,下面就是实战案例,一起来看一下。 首先先正经的来一段官网的”忠告”: vuex需要遵守的规则: 一、应用层级的状态…

    2025年3月8日
    200
  • 怎样使用JS求Number类型数组最大元素

    这次给大家带来怎样使用JS求Number类型数组最大元素,使用JS求Number类型数组最大元素的注意事项有哪些,下面就是实战案例,一起来看一下。 以下介绍四个方法。 1. 不使用任何库函数 代码如下: function findMax1 …

    编程技术 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
  • vuex 的简单使用

    vuex是一个专门为vue.js设计的集中式状态管理架构。这篇文章主要介绍了vuex 的简单使用,需要的朋友可以参考下 什么是Vuex? vuex是一个专门为vue.js设计的集中式状态管理架构。状态?我把它理解为在data中的属性需要共享…

    编程技术 2025年3月8日
    200
  • 怎样使用JS继承与多继承

    这次给大家带来怎样使用JS继承与多继承,使用JS继承与多继承的注意事项有哪些,下面就是实战案例,一起来看一下。 虽然最新的EC6里边已经有了class的相关功能,但是从普及度上和阅读旧代码需求的方面来看,这点知识也得了解一下。 本文结构: …

    2025年3月8日
    200
  • 如何使用JS继承与多继承

    这次给大家带来如何使用JS继承与多继承,使用JS继承与多继承的注意事项有哪些,下面就是实战案例,一起来看一下。 虽然最新的EC6里边已经有了class的相关功能,但是从普及度上和阅读旧代码需求的方面来看,这点知识也得了解一下。 本文结构: …

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

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

    2025年3月8日 编程技术
    200

发表回复

登录后才能评论