当前位置: 首页 > article >正文

【React】React-router路由

React路由

    • 路由的定义
    • 路由安装
    • 路由的使用
      • 导入路由
      • 定义路由
      • Switch的使用
      • Rediret的使用
      • 嵌套路由
      • 路由跳转模式
      • 路由传参
      • 路由拦截
    • 反向代理
    • css module

路由的定义

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

注: 一个针对react设计的路由解决方案,可以友好的帮助解决React components到URL之间的同步映射关系

路由安装

npm i react-router-dom@5

路由的使用

导入路由

import {HashRouter as Router,Redirect,Route,Switch} from 'react-router-dom'

注:路由模式有HashRouterBrowserRouter两种模式,其中BrowserRouter的路径没有#,样式好看,真正朝后端发请求,后端若没有对应的路径去处理路径,就会404

定义路由

<Route path="/films" component={Films} />

其中path是对应的路由路径component是与路由对应的组件

Switch的使用

<Switch>
                <Route path="/films" component={Films} />
                <Route path="/cinemas" component={Cinemas} />
                <Route path="/center" component={Center} />

</Switch>

Switch的功能与switch语句功能一样,对传入的路由进行匹配选择,当匹配到一个path后将不再继续进行匹配

Rediret的使用

对于匹配不到的路径,可以使用Redirect进行重定向,直接调转到某个指定页面

<Redirect from='/' to='/films' exact />

注意:Redirect的的使用要与Switch结合使用,且在Switch中写在Route之后

嵌套路由

在父组件中定义路由

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

路由跳转模式

声明式导航

<NavLink to={"/films"} activeClassName="active">电影</NavLink>

编程式导航

//方式一--通过父组件传的props参数
props.history.push ('/films')

//方式二--引入useHistory
import { useHistory } from 'react-router-dom'

 history.push(`/films`)

路由传参

路由传参共有三种模式–动态路由传参query传参state传参

动态路由传参

直接将传入的参数放置在路径中

  history.push(`/detail/${id}`)

子组件获取页面id

props.match.params.myid

query传参

将传入的参数赋值到query参数中,自动拼接

 history.push({pathname:"/detail",query:id})

子页面获取页面id

props.location.query

state传参

与query参数相似,将传入的参数赋值到state参数中,自动拼接

history.push({pathname:"/detail",state:{myid:id}})

子页面获取页面id

props.location.state.myid

路由拦截

对于某些页面的跳转需要用户满足一些条件,可以通过路由拦截阻止未满足的用户跳转到指定页面

<Route path='/center' render={(props)=>{
  	return isAuth()? <Center {...props}></Center>:<Redirect to='/login' />
                }} />

反向代理

Reactke通过Proxy进行反向代理,解决跨域问题

https://facebook.github.io/create-react-app/docs/proxying-api-requests-in-development

安装包下载

npm install http-proxy-middleware --save

在src文件夹下建立setuoProxy.js文件

文件内容如下

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/ajax',  //转发请求--接口地址带有/ajax前缀的接口路径才会被转发给target
    createProxyMiddleware({
      target: 'https://i.maoyan.com',   //target是api服务器访问的地址
      changeOrigin: true,
    })
  );
};

注:可配置多个代理

css module

在React中每个组件的css样式会统一出现在主页面,为避免样式覆盖,css module默认局部样式

使用步骤:

  • css文件命名后缀改为.module.css

  • 在组件中引入并可命名为style

    import style from './css/Film.module.css'
    
  • 在对应的元素中使用该类名

    <div className={style.film}>
    

注意:类名可进行字符串拼接

<div className={style.film +" aaa"}>

在css module文件中定义全局样式

:global(#kerwin){
	color:red
}

欢迎各位评论指正,期待你们的支持✨✨✨


http://www.kler.cn/news/18576.html

相关文章:

  • MySQL【存储过程与存储函数】
  • 操作系统基础知识介绍之指令集体系结构:RISC-V寄存器(掺杂与ARM和X86部分比对)
  • 羡慕!因工作琐事太多,女子果断从体制内裸辞
  • 使用FastAPI构建高效Python Web应用程序的详细教学
  • HBase:Hadoop生态系统中的分布式NoSQL数据库【上进小菜猪大数据系列】
  • 安装gitea
  • 【web】HTTP工作原理及应用
  • 基于SpringBoot的线上日志阅读器
  • Midjourney生成LOGO指南
  • 静态代码块、实例代码块、构造方法的执行顺序
  • Linux介绍及环境搭建
  • Liunx 使用命令连接Redis
  • 关于 std::condition_variable
  • web之iframe的那些事、打开外链、窗口、嵌入、iframe、location、href、replace、open、assign
  • KingbaseES V8R6备份恢复系列之 -- system-Id不匹配备份故障
  • Java引用类型(强引用,软引用,弱引用,虚引用)
  • 运维高可用架构的 6 大常规方案
  • 重新定义座舱智能化的下半场?谁能抓住弯道超车的窗口期
  • 《Kubernetes证书篇:基于cfssl工具集一键生成二进制kubernetes集群相关证书(方法一)》
  • MySQL:数学函数和字符串函数
  • VMware NSX Advanced Load Balancer (NSX ALB) 22.1.3 - 负载均衡平台
  • 从零构建自己的脚手架
  • 【多线程初阶三】简单了解wait和notify方法~
  • [Go语言实战]并发模式runner
  • iOS输入限制表情输入、最大字符、正则过滤
  • Geoffrey Hinton对于AI的警示 20230507
  • SQL 招聘网站岗位数据分析
  • 数据挖掘笔记
  • Spring-AOP
  • 文心一言 VS chatgpt (6)-- 算法导论2.3 1~2题