React(8)

news2024/11/26 0:38:11

千锋学习视频https://www.bilibili.com/video/BV1dP4y1c7qd?p=72&spm_id_from=pageDriver&vd_source=f07a5c4baae42e64ab4bebdd9f3cd1b3

1.React 路由

1.1 什么是路由?

        路由是根据不同的 url 地址展示不同的内容或页面。 

        一个针对React而设计的路由解决方案、可以友好的帮你解决React components 到URl之间的同步映射关系。

1.2 路由安装

npm i react-router-dom@5

1.3 路由使用

import React, { Component } from 'react'
import {HashRouter,Route} from 'react-router-dom'
import Film from './views/Film'
import Cinemas from './views/Cinemas'
import Center from './views/Center'



export default class componentName extends Component {
    render() {
        return (
            <div>
                 <HashRouter>  
                    <Route path="/films" component={Film}></Route>
                    <Route path="/cinemas" component={Cinemas}></Route>
                    <Route path="/Center" component={Center}></Route>
                </HashRouter> 
            </div>
        )
    }
}

  <HashRouter> 会让路径带上一个/#

也可以把路由封装成一个组件抽离出去


import React, { Component } from 'react'

import MyRouter from './MyRouter'
// import Film from './views/Film'
// import Cinemas from './views/Cinemas'
// import Center from './views/Center'



export default class componentName extends Component {
    render() {
        return (
            <div>
                {/* <HashRouter>  也可以把路由封装成一个组件抽离出去
                    <Route path="/films" component={Film}></Route>
                    <Route path="/cinemas" component={Cinemas}></Route>
                    <Route path="/Center" component={Center}></Route>
                </HashRouter> */}
                <MyRouter></MyRouter>
        
            </div>
        )
    }
}


import React, { Component } from 'react'
import {HashRouter,Route} from 'react-router-dom'
import Film from './views/Film'
import Cinemas from './views/Cinemas'
import Center from './views/Center'

export default class MyRouter extends Component {
    render() {
        return (
            <div>
                 <HashRouter>  
                    <Route path="/films" component={Film}></Route>
                    <Route path="/cinemas" component={Cinemas}></Route>
                    <Route path="/Center" component={Center}></Route>
                </HashRouter>
            </div>
        )
    }
}

1.4 路由重定向

如果没有匹配的路径,需要跳转到指定的路径  使用<Redirect  from=""  to="" />


import React, { Component } from 'react'
import {HashRouter,Route,Redirect,Switch} from 'react-router-dom'
import Film from './views/Film'
import Cinemas from './views/Cinemas'
import Center from './views/Center'

export default class MyRouter extends Component {
    render() {
        return (
            <div>
                 <HashRouter>  
                    <Route path="/films" component={Film}></Route>
                    <Route path="/cinemas" component={Cinemas}></Route>
                    <Route path="/Center" component={Center}></Route>
                    {/* 匹配/路径的时候 模糊匹配  跳转到/films */}
                    <Redirect from="/" to="/films"></Redirect>
                    
                </HashRouter>
            </div>
        )
    }
}

 但是这个做法存在问题:当输入http://localhost:3000/#/center 会跳到center 但再次刷新又会跳到/films 

改进:使用Switch   匹配一次后将不再继续匹配


import React, { Component } from 'react'
import { HashRouter, Route, Redirect, Switch } from 'react-router-dom'
import Film from './views/Film'
import Cinemas from './views/Cinemas'
import Center from './views/Center'

export default class MyRouter extends Component {
    render() {
        return (
            <div>
                <HashRouter>
                    <Switch>
                        <Route path="/films" component={Film}></Route>
                        <Route path="/cinemas" component={Cinemas}></Route>
                        <Route path="/Center" component={Center}></Route>
                        {/* 匹配/路径的时候  跳转到/films */}
                        <Redirect from="/" to="/films"></Redirect>
                    </Switch>
                </HashRouter>
            </div>
        )
    }
}

精准匹配exact

场景:/ 跳转到/films  其他不匹配上述路由的跳转到404


import React, { Component } from 'react'
import { HashRouter, Route, Redirect, Switch } from 'react-router-dom'
import Film from './views/Film'
import Cinemas from './views/Cinemas'
import Center from './views/Center'
import NotFound from './views/NotFound'

export default class MyRouter extends Component {
    render() {
        return (
            <div>
                <HashRouter>
                    <Switch>
                        <Route path="/films" component={Film}></Route>
                        <Route path="/cinemas" component={Cinemas}></Route>
                        <Route path="/Center" component={Center}></Route>
                        {/* 匹配/路径的时候  跳转到/films */}
                        <Redirect from="/" to="/films" exact></Redirect>
                        
                        <Route component={NotFound}></Route>
                    </Switch>
                </HashRouter>
            </div>
        )
    }
}

import React, { Component } from 'react'

export default class NotFound extends Component {
    render() {
        return (
            <div>
                404 Not Found
            </div>
        )
    }
}

注意:exact 精确匹配 (Redirect 即使使用了exact, 外面还要嵌套Switch 来用)

1.5 嵌套路由

MyRouter组件中的路由保持不变   当/film模糊匹配到后会进入Film组件

以下代码在Film组件中写即可

<Switch>
    <Route path="/films/nowplaying" component={Nowplaying}/>
    <Route path="/films/comingsoon" component={Comingsoon}/>
    <Redirect from="/films" to="/films/nowplaying"/>
</Switch>

1.6 路由跳转方式

1.声明式导航

 

import React, { Component } from 'react'
import {NavLink} from 'react-router-dom'

export default class Navbar extends Component {
    render() {
        return (
            <div>
                <li><NavLink to="/films">电影</NavLink></li>
                <li><NavLink to="/cinemas">影院</NavLink></li>
                <li><NavLink to="/center">我的</NavLink></li>

            </div>
        )
    }
}

意思是可以监听到地址  如果是/center会给我的这个a标签给加上class="active"的属性,

也可以自定义属性,方便设置css高亮显示

  <li><NavLink to="/films" activeClassName="Navbaractive">电影</NavLink></li>
  <li><NavLink to="/cinemas" activeClassName="Navbaractive">影院</NavLink></li>
  <li><NavLink to="/center" activeClassName="Navbaractive">我的</NavLink></li>

2.编程式导航

this.props.history.push(`/center`)

或者导入useHistory

import {useHistory} from 'react-router-dom'

const history =useHistory()

history.push(`/detail`)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/912599.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python从入门到精通——完整教程

阅读全文点击《python从入门到精通——完整教程》 一、编程入门与进阶提高 Python编程入门 1、Python环境搭建&#xff08; 下载、安装与版本选择&#xff09;。 2、如何选择Python编辑器&#xff1f;&#xff08;IDLE、Notepad、PyCharm、Jupyter…&#xff09; 3、Pytho…

安装npm和react

下载react 下载node链接 或者&#xff1a; https://nodejs.org/zh-cn/download/ 下载以后重启电脑&#xff08;刷新环境变量&#xff09; 或者手工刷新环境变量 检查环境变量 node -v npm -v如果没有问题应该是这两个&#xff1a; 修改镜像源 npm config set registry ht…

基于swing的在线考试系统java jsp线上试卷问答mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的在线考试系统 系统有2权限&#xff1a;管…

第二篇:基础窗口部件 QWidget

基础窗口部件 QWidget QWidget 类是所有用户界面对象的基类&#xff0c;因此被称为基础窗口部件。QWidget 继承自 QObject 类和QPaintDevice 类&#xff0c;其中 QObject 类是所有支持 Qt 对象模型&#xff08;Qt Object Model&#xff09;的对象的基类&#xff0c;QPaintDevi…

LTD与杭州商务局系统签订战略合作协议:共同推动商贸企业数字化

LTD将继续发挥“营销SaaS系统场景应用”的优势&#xff0c;为做强做优做大我国数字经济贡献更多力量。 近日&#xff0c;由杭州市商务局指导&#xff0c;杭州市商务发展研究中心&#xff08;杭州市中小商贸流通企业服务中心&#xff09;主办&#xff0c;每日商报承办&#xff0…

【Vue3】 Vue-Router路由和路由导航守卫

路由 前后端分离阶段路由单页面富应用阶段前端路由如何做到URL和内容进行映射?URl的hash&#xff08;哈希&#xff09;URl的history Vue-Router基本使用1&#xff0c;安装Vue-Router2&#xff0c;新建页面router文件下的index.js,路由&#xff0c;导入页面&#xff0c;导入路由…

一定解决JavaFx运行时Application爆红色问题

文章目录 注意maven项目创建maven javafx项目配置 注意 以下的问题纯粹是因为新建的是普通项目&#xff0c;而不是Java FX项目&#xff0c;如果新建的是Java FX项目&#xff0c;那么idea会自动给你生成相应的需要的pom.xml文件&#xff0c;并且运行也是正常的 maven项目创建…

RPC和HTTP协议

RPC 全称&#xff08;Remote Procedure Call&#xff09;&#xff0c;它是一种针对跨进程或者跨网络节点的应用之间的远程过程调用协议。 它的核心目标是&#xff0c;让开发人员在进行远程方法调用的时候&#xff0c;就像调用本地方法一样&#xff0c;不需要额外为了完成这个交…

Rspack 创建 vue2/3 项目接入 antdv(rspack.config.js 配置 less 主题)

一、简介 Rspack CLI 官方文档。 rspack.config.js 官方文档。 二、创建 vue 项目 创建项目&#xff08;文档中还提供了 Rspack 内置 monorepo 框架 Nx 的创建方式&#xff0c;根据需求进行选择&#xff09; # npm 方式 $ npm create rspacklatest# yarn 方式 $ yarn create…

SSD基本工作原理了解

SSD与RAM的原理有些类似&#xff0c;RAM使用晶体管和电容来表示0或1&#xff0c;晶体管用于将电荷转移到电容器或从电容器中吸取电荷&#xff0c;并且电荷必须每几微秒刷新一次。 而SSD相比于RAM的非易失性来自于其使用的浮栅晶体管。其创造了一个小笼子&#xff0c;不需要外界…

Sui生态项目|集隐私通信、移动钱包、链上朋友圈和红包功能一体的社交应用ComingChat

ComingChat是在Sui网络上构建的去中心化社交平台&#xff0c;功能众多&#xff0c;其中加密聊天功能为用户提供了安全的沟通方式。该功能利用了Signal加密协议&#xff0c;这是一种在Signal、WhatsApp和Skype等应用中广受欢迎的开源软件协议。 ComingChat在Sui上提供了全面的…

Echarts 柱状图-值为0时柱状图数据

需求是这样的&#xff1a;当数据为0时&#xff0c;鼠标悬浮也需要展示对应的数据&#xff0c;当值很小&#xff0c;也需进行占位&#xff0c;所以要加barMinHeight 刚开始以为没有对应方案呢&#xff0c;然后在官网死磕&#xff0c;最后还是找到解决方案了. 打开官网地址 解决方…

软件测试工程师的职业发展方向,别迷茫了,振作起来

软件测试在职业发展上&#xff0c;可以概括分为“管理”和“技术”两大类。另外&#xff0c;软件测试还可以在质量领域发展。 1. 软件测试在管理上的发展 软件测试管理是大家比较熟悉的软件测试职业发展路线之一&#xff0c;比较流行的职位包括测试组长、测试经理、测试代表、…

删除ubuntu开始菜单中的图标

背景 本来是很好看干净的界面 更新谷歌浏览器后出现了Gmail&#xff0c;幻灯片&#xff0c;谷歌硬盘等跟谷歌相关的乱七八糟东西搞得界面就很丑 解决问题 删掉那个图标 输入命令 sudo nautilus /usr/share/applicationssudo nautilus ~/.local/share/applications可以…

风险变化快,业务人员如何快速增加风控规则?

目录 什么是风控规则&#xff1f; 风控规则的来源 如何在风控引擎中配置规则&#xff1f; 今年暑假&#xff0c;博物馆和演出会门票被黄牛抢走。主办方、博物馆如果拥有风控系统&#xff0c;可以制订一系列规则来识别和拦截潜在的黄牛行为。 在制订规则时&#xff0c;需考虑…

什么是负载均衡

前提概述 关于负载均衡&#xff0c;我会从四个方面去说 1. 负载均衡产生的背景 2. 负载均衡的实现技术 3. 负载均衡的作用范围 4. 负载均衡的常用算法 负载均衡的诞生背景 在互联网发展早期&#xff0c;由于用户量较少、业务需求也比较简单。对于软件应用&#xff0c;我们只需要…

code论坛系统测试

目录 一 项目介绍**项目名称****项目介绍****项目功能****项目展示** 二 测试用例设计和功能测试1.测试用例设计**①登录页面****②注册页面****③首页****④发布帖子页面****⑤修改个人信息页面** 2.功能测试环境3.实际执行功能测试的部分操作**①登录页面****②注册页面****③…

Apple Pay 内购项目价格异常相关

通过 Apple Pay 内购商品子项的实际支付价格与 App Store Connect 配置中的存在差异; 经过已经排查过后发现是参照转换汇率的基准方式导致; 在 App 内购买项目 > 价格时间表 > App 内购买项目定价 > 所在国家或地区 一栏中,官方默认配置是以美国(USD)换算为基准 解决办…

优思学院|车间管理的五大基本方法

车间管理对于任何制造型企业来说都是至关重要的一环。有效的车间管理可以帮助企业提高生产效率&#xff0c;降低成本&#xff0c;改善产品质量&#xff0c;以及增强员工士气。在这篇文章中&#xff0c;我们将探讨车间管理的五大基本方法&#xff0c;这些方法可以帮助企业更好地…

NOIP 2011 提高组复赛真题及题解(day1 day2) Pascal语言

题目描述 为了准备一个独特的颁奖典礼&#xff0c;组织者在会场的一片矩形区域&#xff08;可看做是平面直角坐标系的第一象限&#xff09;铺上一些矩形地毯。一共有n 张地毯&#xff0c;编号从1 到n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设&#xff0c;后…