React新版扩展特性

news2024/11/26 20:35:52

目录

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就可以解决

先建一个一般组件

 

 

测试

 

 

 

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

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

相关文章

Redis进阶:缓存穿透|缓存击穿|缓存雪崩问题

Redis应用问题 1. 缓存穿透问题1.1 问题描述1.2 解决方案方法一&#xff1a;空值缓存方法二&#xff1a;设置可访问的名单&#xff08;白名单&#xff09;方法三&#xff1a;采用布隆过滤器方法四&#xff1a;进行实时监控 2. 缓存击穿问题2.1 问题描述2.2 解决方案方法一&…

在金融行业工作有哪些必须熟练掌握的 Excel 公式?

金融中需要掌握的 Excel 公式有很多&#xff0c;以下是一些重要的公式和技巧&#xff1a; 1. SUM、AVERAGE、MIN、MAX 等基本统计函数 2. IF、AND、OR 等逻辑函数 3. VLOOKUP、HLOOKUP、INDEX、MATCH 等查找函数 4. PMT、PV、FV、NPV、IRR 等财务函数 5. CONCATENATE、LEF…

nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞

第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候&#xff0c;你会想到什么&#xff1f;如果不对技术本身进行更为深入的探讨&#xff0c;在我的世界里&#xff0c;有这么多技术概念可以被罗列出来&#xff08;请原谅我本质上是一个Windows程序员的事实&a…

HarmoneyOS--从简单页面跳转开始2

此处对上个页面跳转适当增加内容&#xff0c;主要为List组件和grid组件的使用&#xff0c;适当熟悉最基本的容器Row和Column的使用 Login.ets // ts-nocheck import router from ohos.router; Entry Component struct TextDemo {State name:string State password:string bui…

vue2 + antd 封装动态表单组件(三)

最近有小伙伴在问动态表单如何再次封装&#xff0c;比如配合模态框或者抽屉封装多一层&#xff0c;这样可以大大提高开发效率&#xff0c;结合之前的写的 vue2 antd 封装动态表单组件&#xff08;一&#xff09; vue2 antd 封装动态表单组件&#xff08;二&#xff09; 做了…

【技术选型】时序数据库选型

文章目录 1、前言2、概述2.1 时序数据库的定义2.2 时序数据库的概念2.3 时序数据库的趋势 3、时序数据库对比3.1 influxdb3.2 Prometheus3.3 TDengine3.4 DolphinDB 4、选型结论 1、前言 时序数据治理是数据治理领域核心、打通IT与OT域数据链路&#xff0c;是工业物联网基石、…

Macos中Automator自动操作实现文本加解密、Json格式化、字数统计等操作

文章目录 一、说明打开Automator效果 二、文本加密三、文本解密四、Json格式化五、字数统计 一、说明 在 Automator 的工作流程中&#xff0c;动作是按照从上到下的顺序执行的&#xff0c;每一个动作的输出默认会成为下一个动作的输入。 打开Automator Command 空格 &#…

万万没想到系列,世界上最知名的失败建筑设计合集!

​ 大家好&#xff0c;这里是建模助手。 我们生活在由建筑包围的世界里&#xff0c;生活的面貌造就了建筑的多样性。而矗立的建筑也无言的记录着时代&#xff0c;尤其是一些建筑大师们的作品&#xff0c;可谓是集艺术和美学于一体的一流名作。 但&#xff0c;这不是凡事都有例…

虚拟内存原理介绍

文章目录 1. 虚拟内存介绍2. 虚拟寻址3. 虚拟地址空间3. 页表4. 地址翻译5. TLB加速地址翻译6. 多级页表7. 页面置换算法 1. 虚拟内存介绍 我们知道系统中的所有进程都是共享CPU和主存资源&#xff0c;但这样就会存在一个问题&#xff0c;这么多进程怎么知道主存上的一块内存是…

使用Java语言开发高效易用的--雅书阁商城管理系统

使用Java语言开发雅书阁商城管理系统 如果你正在寻找一种简单而优雅的方式来管理图书&#xff0c;那么使用Java语言开发雅书阁商城管理系统就是一个好选择。下面我们来详细介绍这个系统的开发过程。 效果展示 1.首页 2.注册界面 3.登录成功商城首页 4.购物车 5.电子书…

避开测试开发的常见陷阱:一份实战指南

陷阱一&#xff1a;过度依赖自动化测试 过度依赖自动化测试可能导致对复杂的用户交互和体验不够重视。自动化测试的力量在于它的一致性和覆盖广泛的可能性&#xff0c;但人工测试也同样重要&#xff0c;尤其是对于用户体验和复杂的用户交互。 示例&#xff1a;在一个电商网站…

ROS和ROS2使用

ubuntu20.04下安装qt5.12 https://blog.csdn.net/lj19990824/article/details/121013721 Ubuntu 20.04在桌面左侧边栏添加QT creator快捷图标 https://blog.csdn.net/kavieen/article/details/118695038 Qt和ROS&#xff1a;https://github.com/chengyangkj?tabrepositories…

操作系统原理 —— 内存覆盖与交换(十九)

什么情况下需要覆盖与交换 要弄清楚什么是覆盖与交换的概念&#xff0c;首先我们要知道在什么情况下才会使用到覆盖与交换。 在早期的计算机内存很小的时候&#xff0c;比如 IBM 推出的第一台 PC 机最大只支持 1 MB 大小的内存&#xff0c;因此会经常出现内存大小不够的情况&…

c++函数重载与运算符重载基础

什么是重载 重载&#xff0c;简单说&#xff0c;就是函数或者方法有相同的名称&#xff0c;但是参数列表不相同的情形&#xff0c;这样的同名不同参数的函数或者方法之间&#xff0c;互相称之为重载函数或者方法。 重载的作用&#xff1a;重载函数常用来实现功能类似而所处理的…

【C语言】数组和字符串

目录 数组和字符串 概述 一维数组 一维数组的定义和使用 一维数组的初始化 数组名 二维数组 字符数组与字符串 字符数组与字符串区别 数组和字符串 概述 在程序设计中&#xff0c;为了方便处理数据把具有相同类型的若干变量按有序形式组织起来——称为数组。 数组就…

紧接上文,基于轻量级yolov5s模型开发构建手写甲骨文检测识别系统

在我之前的文章中&#xff0c;关于手写文字、手写数字、手写字母的检测识别相关的项目都有了不少的实践了&#xff0c;这里就不在赘述了&#xff0c;感兴趣的话可以自行移步阅读即可。 《基于轻量级目标检测模型实现手写汉字检测识别计数》 《python开发构建基于机器学习模型…

【ICEM CFD】导入模型后,即使勾选point和curve也看不到几何模型上的点和线

一、问题背景 导入模型后&#xff0c;即使勾选point和curve也看不到几何模型上的点和线。 二、解决办法 原来导入模型后&#xff0c;往往第一步最需要操作的是&#xff01;&#xff01;&#xff01; 构建拓扑&#xff01;&#xff01;&#xff01; Build Diagnostic Topolo…

完美解决safari、微信浏览器下拉回弹效果、包含微信小程序 webview 套H5页面下拉效果。

如题&#xff0c;解决微信小程序、公众号 下拉回弹橡皮筋效果&#xff0c; 屏蔽掉 “此网页由XXXXX提供”; // 禁止页面上下整体滑动 document.body.style.overflow "hidden"

基于Jmeter+ant+Jenkins+钉钉机器人群通知的接口自动化测试

前言 搭建jmeterantjenkins环境有些前提条件&#xff0c;那就是要先配置好java环境&#xff0c;本地java环境至少是JDK8及以上版本&#xff0c;最好是JAVA11或者JAVA17等较高的java环境&#xff0c;像jenkins这种持续构建工具基本都在向上兼容JAVA的环境&#xff0c;以前的JAV…

为什么网络安全人口很稀缺,招聘人数却很少?

2020年我国网络空间安全人才数量缺口超过了140万&#xff0c;就业人数却只有10多万&#xff0c;缺口高达了93%。这里就有人会问了&#xff1a; 1、网络安全行业为什么这么缺人&#xff1f; 2、明明人才那么稀缺&#xff0c;为什么招聘时招安全的人员却没有那么多呢&#xff1…