React新版扩展特性

目录

Hooks

三个常用的Hook

State Hook

 Effect Hook

 Ref Hook

 Context

 Router 6

声明式路由

 编程式路由导航


Hooks

(1) Hook是react 18.8.0版本新增的特性/语法

(2) 可以让我们在函数式组件中使用state以及其他的react特性

三个常用的Hook

(1) State Hook: React.useState()

(2) Effect Hook: React.useEffect()

(3) Ref Hook: React.useRef()

State Hook

(1) State Hook 让函数组件也可以有state状态 并进行状态数据的读写操作

(2) 语法: const[变量名,set修改变量的方法] = React.useState(initvalue)

(3) useState()说明:

             参数: 第一次初始化指定的值在内部作缓存

             返回值: 包含两个元素的数组 第一个为内部当前状态的值 第二个为更新状态值的函数方法

(4) setXXX()2种写法:

         setXXx(newValue) : 参数为非函数值  直接指定新的状态值 内部用其覆盖原来的状态值

         setXXx(value=> newValue) : 参数为函数 接收原来的状态值 返回新的状态值 内部用其覆盖原来的状态值

先使用传统的类式组件来进行数据处理然后进行比对

类式组件:

 

函数式组件:

 测试

 Effect Hook

(1) Effect Hook 可以让你在函数组件中执行副作用操作(用于模拟类组件中的生命周期钩子)

(2) React中的副作用操作:

              发ajax请求数据操作

             设置订阅 /启动定时器

              手动更改真实Dom

(3) 语法和说明:

               useEffect(()=>{

                //执行副作用操作

                return ()=>{

                 //在组件卸载前执行

                // 在此做一些收尾工作 比如清除定时器 /取消订阅等

}

},[stateValue] //如果指定的是[],回调函数只会在第一次render()后执行)

(4) 可以把useEffect Hook 看做如下三个函数的组合:

    componentDidMount()  组件要挂载时执行

    componentDidUpdate()   组件更改时执行

    componentWillUnmount()  组件要卸载前执行

类式组件写法:

 

测试

 函数式写法:

 测试:

 Ref Hook

使得函数式组件也可以像类式组件一样使用ref

类式组件:

 测试

函数式:

 测试

 

 Context

一种组件间通信方式 常用于[祖父组件] 与[后代组件]间通信

使用:

(1) 创建 Context容器对象

    const xxxContext = React.createContext()

(2) 渲染子组件时 外面包裹 xxxContext.Provider 通过value属性给后代组件传递数据

<xxxContext.Provider value={数据}>

     子组件

</xxxContext.Provider> 

(3) 后代组件读取数据:

    第一种方式: 仅适用类组件方式:

   static contextType = xxxContext //声明接收 context

   this.context //读取context中的value数据

//第二种方式: 函数组件类组件都适用

<xxxContext.Consumer>

    {

       value=>(//value就是context中的value数据)

      要显示的内容

    }

</xxxContext.Consumer>

先看下使用props传递方式.父->子->孙

可以看到,如果想把父组件App的名字传递给孙组件Cpp,如果使用props的话需要一层一层进行props传递,而且在每一层还需要再次声明接收,这样很不方便

如果使用context可以直接将数据由父->子

 

 函数式写法:

 Router 6

React Router以三个不同的包发布到npm上 分别为:

(1) react-router:路由的核心库 提供了很多的组件和钩子

(2) react-router-dom:包含react-routerd所有的内容 并添加一些专门用于Dom的组件 例如:<BrowerRouter>

(3) react-router-native:包括了react-router所有内容 并添加一些专门用于Reactnative的api 例如:<NativeRouter>

与router5版本相比 主要变化:

(1) 内置组件的变化:移除<Switch/> 新增<Routers/>等

(2) 语法的变化: component={组件名} 变为 element={<组件名/>}

(3) 新增多个hook: userParams,useNavigate,useMatch等

(4) 官方明确推荐使用函数式组件

声明式路由

代码示例:

首先安装最新6路由

npm i react-router-dom

 定义两个子组件

 

 再封装一个包裹组件容器

 

 测试

 

 如果有许多页面组件需要路由配置时,可以直接将路由组件的配置进行提取成单个路由表文件进行解耦

 还可以进一步提取,将配置的路由表单独提取为一个文件

引入router表文件

 效果和之前写法一样

嵌套路由并传参

 

 shop父组件,嵌套Message和news组件,Message组件再嵌套Detail组件,message组件传参到detail组件进行显示测试

params传参:

定义路由规则:

 

detail进行接参时有两种方式,可以直接进行userParams解构,也可以使用useMatch进行解析,两者稍有区别

 

测试

 

 可以看到参数的话可以直接从useParams中进行解析,而如果使用useMatch的话还需要进行路径和参数占位,并且取出的数据并不可以直接解构取数

所以一般情况下还是useParams中使用较多

search传参:

search传参不需要在路由文件中路径上进行参数占位 传参时可以直接进行拼接传参

传参 

 接参

 测试

 

 可以看到useSearchParams和useLocation都可以取到参数,区别就是useSearchParams解构得到的是map类型的参数和更改参数的方法,useLocation得到的是参数拼接的字符串,如果想要使用参数还需要进一步的解析字符串

state传参

state传参和search传参一样在路由路径中不需要再配置参数占位,所以路由路径不用动

 

从useLocation()的state属性中进行参数的解析

测试

 

 编程式路由导航

router6中提供useNavigate()接口来优化router5的编程式导航

注意:编程式导航传参只能传递state形式的参数,search和params形式参数直接拼在路径上即可

测试

 控制页面前进后退

之前router5版本中如果想让一般组件也有路由组件的history的话是需要使用withOutr标签的,6版本的路由不需要这么麻烦,也是直接使用useNavigate就可以解决

先建一个一般组件

 

 

测试

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用javacv中的ffmpeg实现录屏

今天突发奇想&#xff0c;想自己写一个录屏的软件&#xff0c;上次写了一个专门录音的Demo&#xff0c;但是要把声音和视频放到一起合成一个mp4文件&#xff0c;着实有一点艰难&#xff0c;所以就打算使用ffmpeg来写一个&#xff0c;而这篇博客中会顺便谈一谈我碰到的各种坑。 …

HarmonyOS学习路之开发篇—Java UI框架(StackLayout)

StackLayout StackLayout直接在屏幕上开辟出一块空白的区域&#xff0c;添加到这个布局中的视图都是以层叠的方式显示&#xff0c;而它会把这些视图默认放到这块区域的左上角&#xff0c;第一个添加到布局中的视图显示在最底层&#xff0c;最后一个被放在最顶层。上一层的视图…

数据湖仓一体化架构:探究新一代数据处理的可能性

一、引言 随着大数据的快速发展&#xff0c;企业不断寻求高效、灵活和经济的方法来处理和管理海量数据。在这种背景下&#xff0c;数据湖和数据仓库这两种不同的架构模式各自展现出其独特的优势。而数据湖仓一体化架构&#xff0c;是对这两种模式优势的综合&#xff0c;为企业…

wenda+fess问答系统

1 安装conda 2 创建环境 conda activate --name wenda python3.8 3 安装依赖工具包 pip install -r requirements/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple pip install torch BeautifulSoup4 torchvision torchaudio pdfminer.six -i https://pypi.t…

【乐观锁与悲观锁】—— 每天一点小知识

&#x1f4a7; 乐观锁与悲观锁 \color{#FF1493}{乐观锁与悲观锁} 乐观锁与悲观锁&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&…

美团买菜基于 Flink 的实时数仓建设

摘要&#xff1a;本文整理自美团买菜实时数仓技术负责人严书&#xff0c;在 Flink Forward Asia 2022 实时湖仓专场的分享。本篇内容主要分为四个部分&#xff1a; 背景介绍 技术愿景和架构设计 典型场景、挑战与应对 未来规划 点击查看原文视频 & 演讲PPT 一、背景介绍…

设置全局loading

为什么要设置全局loading&#xff1f; 在项目开发过程中&#xff0c;请求接口的时候延迟没有数据&#xff0c;页面感觉狠卡顿&#xff0c;这个时候就要用loading来做一个延迟界面。 但是每个界面都写loading的话就会很复杂&#xff0c;所以今天给大家带来了一个全局loading的…

JMeter+Ant+jenkins搭建接口自动化测试环境

目录 前言&#xff1a; 1.ant简介 2. 构建ant环境 3.JMeter与Ant集成 4. 报告优化 5.jenkins持续集成 前言&#xff1a; JMeter是一个开源的性能测试工具&#xff0c;可以用于测试Web应用程序或API接口的性能&#xff0c;支持多种通信协议和数据格式。Ant是一个构建工具&…

基于卫星星历计算卫星在CGCS2000大地坐标系中的坐标

目录 一、北斗系统概述 1.空间星座 2.坐标系统 3.时间系统 二、实验目的 三、实验内容 四、实验过程 五、实验结果 一、北斗系统概述 1.空间星座 北斗卫星导航系统简称北斗系统&#xff0c;英文缩写为 BDS&#xff0c;其空间星座由 5 颗地球静止轨道&#xff08;GEO&…

学会使用这些Lumion照片级渲染技巧,秒出大片

Lumion 是一种渲染软件&#xff0c;可帮助建筑师以清晰、感性的方式传达他们的设计。十年来&#xff0c;人们发现 Lumion 的每个新版本都有新的功能、工作流程和控制方法。他们可以在 Revit、SketchUp 或其他 BIM 程序等软件中建模&#xff0c;并将模型导入 Lumion 进行渲染&am…

基于stm32作品设计:多功能氛围灯、手机APP无线控制ws2812,MCU无线升级程序

文章目录 一、作品背景二、功能设计与实现过程三、实现基础功能&#xff08;一&#xff09;、首先是要选材&#xff08;二&#xff09;、原理图设计&#xff08;二&#xff09;、第一版本PCB设计&#xff08;三&#xff09;、焊接PCB板&#xff08;四&#xff09;编写单片机程序…

作为自动化测试工程师,这4个自动化测试阶段你真的知道吗?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 阶段一&#xff1…

Kubernetes集群添加新集群节点

Kubernetes集群添加新集群节点 添加worker节点 参考文档https://gitee.com/open-hand/kubeadm-ha/blob/release-1.21/docs/02/%E6%B7%BB%E5%8A%A0%20worker%20%E8%8A%82%E7%82%B9.md 添加工作节点与集群安装时初始化工作节点一样,可以在主节点上执行&#xff0c;也可以在要加…

第四章 完型填空

第四章 完型填空 第一节 真题 2020-完型填空- Section I Use of English Directions&#xff1a; Read the following text. Choose the best word (s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) Being a good parent is, of cour…

springboot 连接 kafka集群(kafka版本 2.13-3.4.0)

springboot 连接 kafka集群 一、环境搭建1.1 springboot 环境1.2 kafka 依赖 二、 kafka 配置类2.1 发布者2.1.1 配置2.1.2 构建发布者类2.1.3 发布消息 2.2 消费者2.2.1 配置2.2.2 构建消费者类2.2.3 进行消息消费 一、环境搭建 1.1 springboot 环境 JDK 11 Maven 3.8.x spr…

CSDN问答机器人

文章目录 前言一、背景二、总体流程三、构建知识库四、粗排五、精排六、Prompt总结相关博客 前言 先看结果: 已经连续很多周获得了第二名(万年老二), 上周终于拿了一回第一, 希望继续保持. &#x1f601; 这是今天的榜单, 采纳的数量相对较少, 之前基本上维持在100 重点说明…

SpringBoot项目实战:自定义异常和统一参数验证(附源码)

你好&#xff0c;我是田哥 在实际开发过程中&#xff0c;不可避免的是需要处理各种异常&#xff0c;异常处理方法随处可见&#xff0c;所以代码中就会出现大量的try {...} catch {...} finally {...} 代码块&#xff0c;不仅会造成大量的冗余代码&#xff0c;而且还影响代码的可…

母婴商家怎么建立自己的品牌,母婴产品传播渠道总结

随着互联网的发展逐渐深入我们的生活&#xff0c;线上传播的模式也越来越被大家熟知。越来越多的行业开始重视线上传播。那么母婴商家怎么建立自己的品牌&#xff0c;母婴产品传播渠道总结。 其实&#xff0c;母婴产品线上用户群体众多&#xff0c;且母婴产品用户目的明确&…

深入解析IT专业分类、方向及就业前景:高考毕业生如何选择适合自己的IT专业?重点探索近年来人工智能专业发展及人才需求

目录 一、IT专业的就业前景和发展趋势二、了解IT专业的分类和方向三、你对本专业的看法和感想四、本专业对人能力素养的要求五、建议和思考其它资料下载 当今社会&#xff0c;信息技术行业以其迅猛的发展和无限的潜力成为了吸引无数年轻人的热门选择。特别是对于高考毕业生来说…

你的企业还没搭建这个帮助中心网页,那你太落后了!

作为现代企业&#xff0c;拥有一个完善的帮助中心网页已经成为了不可或缺的一部分。帮助中心网页不仅可以提供给用户有关产品或服务的详细信息&#xff0c;还可以解答用户的疑问和提供技术支持&#xff0c;使用户在使用产品或服务时遇到问题可以很快地得到解决。因此&#xff0…