返回顶部
首页 > 资讯 > 前端开发 > html >初试ReactRouterv4 要注意什么
  • 863
分享到

初试ReactRouterv4 要注意什么

2024-04-02 19:04:59 863人浏览 独家记忆
摘要

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

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

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

--结束END--

本文标题: 初试ReactRouterv4 要注意什么

本文链接: https://lsjlt.com/news/81246.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 初试ReactRouterv4 要注意什么
    初试ReactRouterv4 要注意什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。距离React Router v4 正...
    99+
    2024-04-02
  • 初学J2ME需要注意什么
    这篇文章主要讲解了“初学J2ME需要注意什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“初学J2ME需要注意什么”吧!  下面请看一段代码:    import javax.microed...
    99+
    2023-06-03
  • html5测试需要注意什么
    这篇文章主要介绍“html5测试需要注意什么”,在日常操作中,相信很多人在html5测试需要注意什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html5测试需要注意什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-05
  • 美国cn2 vps试用要注意什么
    1. 测试期限:在试用cn2 vps之前,需要了解试用的时间限制,以免超过试用期限而被收费。2. 服务质量:试用前需要了解服务商的服...
    99+
    2023-06-14
    美国cn2 vps 美国vps vps
  • java初始化数组赋值要注意什么
    在Java中,初始化数组并赋值时需要注意以下几点: 确定数组的类型和大小:首先要确定所需数组的类型和大小。数组的大小可以是固定的...
    99+
    2023-10-27
    java
  • 初学者接触web前端需要注意什么
    本篇内容主要讲解“初学者接触web前端需要注意什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“初学者接触web前端需要注意什么”吧!模块化需要实现的功能解决命...
    99+
    2024-04-02
  • shopex虚拟主机试用要注意什么
    1. 确认虚拟主机的资源配置是否满足自己的需求,包括存储空间、流量、CPU、内存等。2. 确认虚拟主机的安全性,包括服务器硬件防护、...
    99+
    2023-06-14
    shopex虚拟主机 虚拟主机
  • 国内免费vps试用要注意什么
    1. 选择正规的VPS服务商,确保账户安全和数据隐私安全。2. 了解免费VPS试用的使用时间和服务内容,避免超时或被限制使用。3. ...
    99+
    2023-06-17
    国内免费vps 国内vps vps
  • 免费香港vps试用要注意什么
    免费香港vps试用要注意:1、香港vps的质量是否较好,可以使用PING、TRACERT命令来判断;2、香港vps的稳定性是否有保障...
    99+
    2023-02-08
    免费香港vps试用 香港vps vps
  • 试用国外云服务器要注意什么
    试用国外云服务器要注意:1、云服务器试用时是否要收取一部分押金,以免交钱后无法退款;2、云服务器免费的试用期限,以免试用期一到就出现各种费用;3、避免被捆绑消费,以免降低用户体验和浪费财力,对网站安全及稳定性带来隐患。具体内容如下:1、有押...
    99+
    2024-04-02
  • 日本vps云主机试用要注意什么
    试用日本VPS云主机时,需要注意以下几点:1、了解试用期限不同的 VPS 云主机提供商试用期限不同,有的只提供1-3天的试用,有的可...
    99+
    2023-03-19
    日本vps云主机 日本云主机 云主机
  • 虚拟空间免费试用要注意什么
    虚拟空间免费试用要注意:1、品质问题,使用PING、TRACERT命令来判断网络的稳定性是否较好;2、稳定性问题,选择稳定性好的虚拟...
    99+
    2023-02-13
    虚拟空间免费试用 虚拟空间
  • 免费vps加速器试用要注意什么
    1、安全性选择可信赖的加速器服务商,确保其有完善的安全措施,防止数据泄露和网络攻击等问题。2、速度选择速度较快的加速器,以获得更好的...
    99+
    2023-05-31
    vps加速器 vps
  • 云服务器试用要注意什么问题
    选择可靠的服务商:选择有信誉和口碑的云服务器服务商,避免因服务商的不稳定或不可靠导致服务器无法正常运行。 规划好资源需求:在...
    99+
    2024-05-10
    云服务器
  • 试用云服务器要注意什么问题
    使用云服务器时,需要注意以下问题: 安全性:确保云服务器的安全性,包括设置强密码、定期更新操作系统和应用程序、安装防火墙和安全补...
    99+
    2024-05-06
    云服务器
  • 初学Java要注意哪些内容
    本篇内容主要讲解“初学Java要注意哪些内容”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“初学Java要注意哪些内容”吧!  一般来说安装完JDK之后,一定要按一下步骤配置,才可正确编译运行(假...
    99+
    2023-06-03
  • 国外免费asp空间试用要注意什么
    1. 服务协议:在试用前,一定要仔细阅读该服务提供商的服务协议,确保其服务内容符合自己的需求,并且不会违反该协议中的任何规定。2. ...
    99+
    2023-06-06
    免费asp空间 空间
  • 美国免费主机cn2试用要注意什么
    使用美国免费主机cn2试用时需要注意以下几点:1、检查安全性首先要检查主机的安全性,以确保服务器的安全性不受到破坏。2、检查网络连接...
    99+
    2023-03-11
    美国免费主机cn2 美国主机 主机
  • 国内服务器免费试用要注意什么
    我不能提供具体的商业建议。但是,以下是一些一般性的建议:1. 了解试用期限:在试用期限结束之前,您需要决定是否继续使用该服务器。因此...
    99+
    2023-06-04
    服务器免费试用 服务器
  • 海外服务器测试要注意什么问题
    在进行海外服务器测试时,需要注意以下问题: 网络延迟:海外服务器与本地服务器之间存在跨国网络连接,可能会导致网络延迟较高。需要测试...
    99+
    2024-04-09
    海外服务器 服务器
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作