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

【React】打卡笔记,入门学习02:react-router

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、react-router的跳转
    • 1、Vue2
    • 2、React
  • 二、react-router的获取参数
    • 1.params 例如:`/form/1`
    • 2.query 例如:form?id=1
  • 三、组件标签
    • 1. 跳转到其他页面
    • 2. 多链接接判断
  • 四、其他
    • 路由配置
  • 示例对比,以及参数相关
    • 场景1:列表页跳转到详情页
    • 场景2:带查询参数跳转
    • 场景3:获取当前路径
    • 场景4:监听路由变化


前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、react-router的跳转

import { useNavigate } from 'react-router';export default function GoodsList() {const navigate = useNavigate();return (<Button onClick={() => navigate('/product/base-goods/form')}>新增商品</Button>)
}

分析对比
navigate就跟uniapp的那个push跳转一样

1、Vue2

// Vue 2
this.$router.push('/product/base-goods/form')
this.$router.replace('/product/base-goods/form')// Vue 3 Composition API
import { useRouter } from 'vue-router'
const router = useRouter()
router.push('/product/base-goods/form')
router.replace('/product/base-goods/form')

2、React

// React Router
import { useNavigate } from 'react-router'
const navigate = useNavigate()
navigate('/product/base-goods/form')  // 类似 router.push()
navigate('/product/base-goods/form', { replace: true })  // 类似 router.replace()

二、react-router的获取参数

1.params 例如:/form/1

代码如下(示例):

// Vue 2
this.$route.params.id// Vue 3 Composition API
import { useRoute } from 'vue-router'
const route = useRoute()
route.params.id//-------------------------------------// React Router
import { useParams } from 'react-router'
const { id } = useParams()
// id 就是路由参数值

标准用法

import { useParams } from 'react-router';
import { Button } from '@/components/ui/button';export default function BaseGoodsForm() {const { id } = useParams();const isEditMode = !!id; // 如果有id就是编辑模式,否则是新增模式return (<div><div className="flex justify-between items-center mb-2.5"><h1 className="text-foreground text-xl font-bold">{isEditMode ? '编辑商品' : '添加商品'}</h1><Button variant="outline">保存</Button></div><div className="grid grid-cols-12 gap-6"><div className="col-span-8"></div><div className="col-span-4">{/* 右侧内容 - 占据4份 */}</div></div></div>);
}

2.query 例如:form?id=1

代码如下(示例):

// Vue 2
this.$route.query.keyword// Vue 3
import { useRoute } from 'vue-router'
const route = useRoute()
route.query.keyword//-------------------------------------// React Router
import { useSearchParams } from 'react-router'
const [searchParams, setSearchParams] = useSearchParams()
const keyword = searchParams.get('keyword')

三、组件标签

1. 跳转到其他页面

<!-- Vue 2/3 -->
<router-link to="/product/base-goods/form">新增商品</router-link>
<router-link :to="{ path: '/product/base-goods/form' }">新增商品</router-link>//-------------------------------------// React Router
import { Link } from 'react-router'
<Link to="/product/base-goods/form">新增商品</Link>

2. 多链接接判断

经常是多个链接,判断选中高亮,类似于menu菜单项

<!-- Vue 需要手动处理 -->
<router-link to="/product/base-goods" :class="{ active: $route.path === '/product/base-goods' }"
>商品
</router-link>
// React Router - 自动处理active状态
import { NavLink } from 'react-router'
<NavLink to="/product/base-goods"className={({ isActive }) => isActive ? 'active' : ''}
>商品
</NavLink>

四、其他

// Vue 3
router.push('/product/base-goods/form')           // 跳转
router.push({ path: '/product/base-goods/form' }) // 对象形式
router.replace('/product/base-goods/form')         // 替换历史记录
router.back()                                      // 返回上一页
router.go(-1)                                      // 返回上一页// React Router
navigate('/product/base-goods/form')                          // 跳转
navigate('/product/base-goods/form', { replace: true })       // 替换历史记录
navigate(-1)                                                   // 返回上一页
navigate(1)                                                    // 前进一页

路由配置

// Vue Router 路由配置
const routes = [{path: '/product/base-goods/form/:id?',  // 可选参数component: BaseGoodsForm,name: 'baseGoodsForm'}
]// React Router 路由配置
route('base-goods/form/:id?', 'routes/product/base-goods-form.tsx', { id: 'baseGoods/form' 
})

示例对比,以及参数相关

场景1:列表页跳转到详情页

// Vue 3
const goToDetail = (id: string) => {router.push(`/product/base-goods/form/${id}`)
}// React Router
const goToDetail = (id: string) => {navigate(`/product/base-goods/form/${id}`)
}

场景2:带查询参数跳转

// Vue 3
router.push({path: '/product/base-goods',query: { page: 1, keyword: 'test' }
})// React Router
navigate('/product/base-goods?page=1&keyword=test')
// 或者
navigate({pathname: '/product/base-goods',search: '?page=1&keyword=test'
})

场景3:获取当前路径

// Vue 3
import { useRoute } from 'vue-router'
const route = useRoute()
const currentPath = route.path// React Router
import { useLocation } from 'react-router'
const location = useLocation()
const currentPath = location.pathname

场景4:监听路由变化

// Vue 3
watch(() => route.params.id, (newId) => {// 路由参数变化时执行
})// React Router
useEffect(() => {// 当id变化时执行
}, [id])
Vue RouterReact Router说明
useRouter()useNavigate()获取导航函数
router.push()navigate()跳转
router.replace()navigate(path, { replace: true })替换历史
router.back()navigate(-1)返回
useRoute()useParams() + useLocation()获取路由信息
route.params.iduseParams().id路由参数
route.query.keyworduseSearchParams().get(‘keyword’)查询参数
http://www.dtcms.com/a/544234.html

相关文章:

  • Latex 转 word 在线
  • 【OD刷题笔记】- 可以组成网络的服务器
  • 《算法闯关指南:优选算法--前缀和》--27.寻找数组的中心下标,28.除自身以外数组的乘积
  • linux arm64平台上协议栈发包报文长度溢出导致系统挂死举例
  • 深入理解 Rust `HashMap` 的哈希算法与冲突解决机制
  • 彩票网站开发做一个网站价格
  • 《C++ 继承》三大面向对象编程——继承:派生类构造、多继承、菱形虚拟继承概要
  • 医疗AI白箱编程:从理论到实践指南(代码部分)
  • Spring Cache 多级缓存中 hash 类型 Redis 缓存的自定义实现与核心功能
  • 福州建设人才市场网站山西网站推广
  • Spring Cache 多级缓存中 ZSet 类型 Redis 缓存的自定义实现与核心功能
  • 从开源到落地:SimpleBGC 三轴稳像平台全栈技术解析(上)
  • 51、STM32 与 ESP32 单片机全面对比:架构、性能与应用场景详解
  • NodeJs
  • 【面试题】缓存先删漏洞解决策略(示例代码)
  • 操作系统(7)虚拟内存-缓存工具-页命中和缺页(3)
  • 旧衣回收小程序的技术架构与商业落地:开发者视角的全链路解析
  • 丽水建设网站织梦网站发布的哪些产品和文章放在a文件可以吗
  • 南京网站设计公司济南兴田德润优惠吗泉州定制网站建设
  • 【设计模式笔记10】:简单工厂模式示例
  • wordpress多站批量发布wordpress 图像描述
  • 永宝网站建设招聘信息松江做移动网站
  • 云手机 基于云计算的虚拟手机
  • 广州网站制作哪家专业网站开发分为哪几种类型
  • server 2012 做网站常州市新北区建设与管理局网站
  • 百度的网站网址做网站所用的工具
  • 网站统计功能设计旭泽建站
  • 网站建设心得8000字权威发布图片红字
  • 阿里做网站重庆市住房和城乡建设人才促进网
  • 个人业务网站教程合肥响应式网站建设方案