React Hook的用法: State + Effect(一)

10 篇文章 4 订阅
订阅专栏

React Hook

简述

React Hook 是React 16.8 这个版本新增的一个特性。在此之前我们编写React组件一般大多数都是用 class组件,而非函数组件,因为函数组件不具有class组件的状态,生命周期这些概念,这就使得在使用函数组件的时候有很多掣肘。而class组件与函数组件相比明显略笨重,很多不必要冗余的模板代码,而且还有this的问题,要么使用箭头函数,要么每次需要bind一下this。但是如果使用了Hook那就可以很好的规避了这些问题。下面就简单介绍一下Hook的用法

State Hook

Hook即钩子,使用的时候都是 use打头,后面再加上具体的钩子,所以就是 useXXX的样子。
state hook 使得函数组件具有了自己的状态,类似class组件中可以通过 state来记录组件状态一样。每次当函数组件的状态的值发生改变的时候,对应的函数组件也会相应的做更新,下面看下用法。

// 需要使用 state 这个 钩子就先将其引入
import React, { useState } from 'react';

const initAge = 20;
const [age, setAge] = useState(initAge);

// 按照上述的方式定义好之后就可以直接使用了,在 render函数中可以像下面这样直接使用和更新 age的值
 <Button type="primary" onClick={()=>setAge(age+1)} className='ml10'>add age</Button>

上述代码的几点说明

  1. useState接受一个变量的初始值(在这里是 initAge)
  2. 返回的是这个初始值的变量(age)和修改这个初始值的方法(setAge)
  3. 根据useState的返回值,我们一般结合结构赋值写成 const [age, setAge] = useState(initAge); 这种形式

注意在这里一般 我们用于接受变量的值是 xx的话(这里是age),那么用于修改这个值的变量就在前面加上 setxx(这里是 setAge);

具体效果如下:
在这里插入图片描述
点击查看线上Demo

可以看到,当我们引入了 state 这个钩子的时候就可以达到class 组件中状态的效果了

Effect Hook

上面的部分使得函数组件具有了记录自己状态的功能,但毕竟不是所有的组件都是“傻瓜”组件,只需要根据外部传入的数据做单纯的渲染即可,作为功能较复杂的大型业务组件有时候需要在合适的时候做一些特殊的业务操作,比如组件刚渲染的时候发出http请求服务端数据,组件销毁的时候去注销一些事件(比如滚动监听事件)避免性能的额外开销,每次点击年龄增加的时候需要发送数据给server等等,这就需要引入 Effect 副作用这个钩子。

组件创建

比如看下面这个例子,组件在刚刚渲染的时候会请求服务端的数据,然后将请求的数据展示更新在页面上:
在这里插入图片描述
使用 useEffet 这个钩子可以接受一个函数,该函数就是在组件渲染的时候会被执行,有点类似class组件中的 componentDidMount 生命周期。

点我查看在线Demo

组件销毁

下面看一下当组件会被销毁的时候执行一些业务操作该如何书写。
这个例子被设计为父组件包含一个函数子组件,函数子组件每次被父组件销毁的时候可以在子组件中触发一个事件钩子暴露给业务开发者,使得开发者可以在这个事件钩子中处理自己需要处理的业务,比如注销所监听的滚动事件,或者是发送请求到server端。
useEffect第一个参数接受一个函数,该函数会在该组件被创建的时候执行,同时这个函数也能 return 另一个函数,而return 的函数就是在该组件被销毁的时候所触发的事件。具体效果如下。
在这里插入图片描述
点击我查看在线Demo

部分参数变化,组件渲染

上面部分已近讲述了一个函数组件在刚创建和被销毁的时候都会对外暴露一个事件钩子,业务开发者可以在提供的钩子事件中去处理需要处理的业务。
在平时一些比较复杂的业务开发场景中可能会遇到一个函数组件,有一部分变量变化的时候需要执行某些特定操作,但另一些变量变化的时候不需要执行某些特定的操作,简而言之就是希望在同一个函数组件中对不同的变量进行区别对待。
比如在一个函数组件中具有 age 和count 两个变量,但是只有在age变化的时候会触发一个弹框,但是 count变化的时候则不会触发这个弹框,只会把新增之后的数字展现在页面上
要实现这个效果实际上就是使用了 useEffect的第二个参数,第二个参数是一个数组,用于登记当该函数组件中的哪些变量变化时候会再次触发useEffect中第一个函数参数,这里之所以说是再次是因为在该组件第一次被创建时候是一定会执行一次的。
效果如下:
在这里插入图片描述
点击我查看在线Demo

总结

  1. Effect Hook 可以实现类组件中的生命周期的功能
  2. uesEffect 第一个参数接受一个函数,该函数会在初始化该函数组件时被调用
  3. useEffect 第一个参数中的函数可以return 另一个函数,该函数会在该函数组件被销毁的时候调用,类似class组件中的 componentWillUnmount 作用
  4. useEffect 第二个参数是一个数组,该数据登记那些状态变量更新的时候,第一个函数参数会再次被调用,类似类组件中的 shouldComponentUpdate功能
  5. useEffect第二个参数可不传,此时该函数组件中所有状态变量变化时,第一个函数参数都会被调用
  6. useEffect第二个参数可传一个空数组 [ ],此时该effect中的内容只有在该函数组件第一次新建和最后一次销毁的时候被执行
  7. useState 和useEffect 可以完全代替一个class组件来实现相同的业务功能

当然使用React Hook 也是有一些规则
8. 只在顶层中使用Hook,并且不要在循环、遍历、嵌套函数中使用Hook
9. 只在React 函数(React函数组件和React自定义Hook)中使用React Hook,不要在普通函数中使用Hook

至此通过上述我们知道可以使用 State Hook和 Effect Hook来实现类似class组件中的状态和生命周期的作用。而使用这两个钩子一般也足以应付我们日常中的大部分常规需求了。
对于其他的功能,比如实现组件传值,和状态统一管理,也是有其对应的Hook来实现。后面会再和大家分享。

React | Hook
liuj4 | 自娱自乐
07-21 231
前言:为什么用Hook? 在一些需求和业务变得复杂的情况下,传统的class component 的几个缺陷: 组件变得复杂和难以维护: 满天class导致的热重载和性能问题: class自身具有的复杂度和组件嵌套过深props层级传递 Hook 基础 API useState useEffect 使用useEffect useContext ...
React HookReact-router的基本使用
x94410891的博客
07-29 969
目录Hook好处:Hook可以解决的问题:目前官网提供的Hook APIuseStateuseEffectuseRef自定义hook1. 创建自定义hook2.使用自定义hookreact-router基本使用1.安装2.导入3.使用总结: Hook HookReact 16.8 的新增特性,React 里面的 Hook 是一个函数. 好处: 它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。 Hook可以解决的问题: 避免地狱式嵌套,可读性提高。 函数式组件,
ReactuseEffect 钩子详解
lph159的博客
07-27 815
在类组件,我们通常在生命周期方法执行这些操作,而在函数组件,我们使用。钩子是 React 16.8 版本引入的,它允许我们在函数组件执行副作用操作。如果传递一个空数组作为依赖项,副作用函数只会在组件首次渲染时执行一次。会在每次组件渲染或更新时执行,而返回的清除函数会在组件卸载时执行。发生变化时,副作用函数会执行,同时会先执行上一次渲染的清除函数。如果传递一个依赖项数组,副作用函数会在依赖项发生变化时执行。如果不传递依赖项数组,副作用函数会在每次渲染后执行。在一个组件可以使用多个。
React 使用 State(状态) Hook
忘川
03-19 751
Hooks是一项新功能提案,可让您在不编写类的情况下使用 state(状态) 和其他 React 功能。 import { useState } from 'react'; function Example() { // 声明一个新的状态变量,我们将其称为 "count" const [count, setCount] = useState(0); return ( <div> <p>You clicked {count} times&lt.
State HookEffect Hook 的运用
王飞
07-22 235
目录Hook 是什么?State HookEffect Hook Hook 是什么? Hook 是一个特殊的函数,可以使你不编写类组件的情况下使用state以及其他React的特性。 State Hook import React, { useState } from 'react'; function Example(){ // 创建一个变量count,创建一个改变变量count的方法setCount,并且设置变量初始值为0; const [count, setCount] = useState(
react Hooks 的用法
weixin_38222276的博客
04-19 366
Hooks是react16.8.0版本增加的新特性/新语法 可以在函数组件使用state以及其他的react特性 三个常用的Hooks 1.state.hook React.useState() 2.Effecthook React.useEffect() 3.Refhook React.useRef() 1.statehook 1.statehook让函数组件也可以有state状态,并进行状态数据的读写操作 2.语法c...
React Hook基本使用踩坑指南
Einstellung的博客
03-22 732
React因为提倡函数式编程,所以提出了Hook思想来增强函数组件的功能,以此来替代基于Class的组件。但是我们有可能从基于Class这样的实例化组件转向函数组件时思想还没有完全转过来,还是用基于实例的思想考虑问题,忘记了函数有用完即销毁(特别是纯函数)这样的特点,导致在使用React Hook的时候可能会出一些问题。下面的内容就来记录一下,使用React Hook的新手可能会遇到的一些问题。 Hook使用原则 首先要强调一下Hook的使用原则,可以参考我之前写的文章:如何使用React Hook最后的
React Hook初探:基础概念与简单应用
React Hook打破了这种限制,可以在函数组件使用state、生命周期方法等React特性,如useState()、useEffect()等。 ### 1.2 React Hook的优势和特点 - 简化代码逻辑:通过Hook,可以直接在函数
react hook使用
qq_45849232的博客
07-20 673
HookReact16.8的新增特性。Hook是一些可以让你在函数组件里“钩入”Reactstate及生命周期等特性的js函数(就是让你可以用到类组件state和生命周期等函数)。,而并非强制按照生命周期划分。
React-hooks+TypeScript最佳实战
xiaofeng123aazz的博客
11-07 302
举个例子 每次渲染都是一个独立的闭包 每一次渲染都有它自己的 Props 和 State 每一次渲染都有它自己的事件处理函数 当点击更新状态的时候,函数组件都会重新被调用,那么每次渲染都是独立的,取到的值不会受后面操作的影响 举个例子参考React实战视频讲解:进入学习 函数式更新 如果新的 需要通过使用先前的 计算得出,那么可以将回调函数当做参数传递给 。该回调函数将接收先前的 ,并返回一个更新后的值。举个例子 惰性初始化 参数只会在组件的初始化渲染起作用,后续渲染时会被忽略 如果初始 需
useEffect使用详解
一步一个脚印,踏实努力,向着目标前进
08-24 8003
useEffectReact的一个钩子函数,用于处理副作用操作。副作用是指在组件渲染过程,可能会对外部环境产生影响的操作,比如数据获取、订阅事件、操作DOM等。useEffect接受两个参数:一个是副作用函数,另一个是依赖数组。副作用函数会在组件渲染时执行,并且在每次组件更新后也会执行。如果依赖数组不为空,并且依赖数组的值发生变化时,副作用函数也会被重新执行。如果依赖数组为空,则副作用函数只会在组件渲染时执行一次。以下是useEffect
05. 快速上手!HarmonyOS4.0 Button_Blank 基础组件详解
全栈若城,专注知识分享
03-28 1万+
此处使用了LoadingProgress 组件 可参考。, 直接在组件内添加字符串即可。
React】945- 你真的用对 useEffect 了吗?
pingan8787
05-02 913
最近在公司搬砖的过程遇到了一个bug,页面加载的时候会闪现一下,找了很久才发现是useeffect的依赖项的问题,所以打算写篇文章总结一下,希望对看到文章的你也有所帮助。1.什么是use...
第九节HarmonyOS 常用基础组件4-Button
yyxhzdm的博客
12-02 1736
type用于定义按钮样式,示例代码ButtonType.Capsule表示胶囊形按钮;stateEffect用于设置按钮按下时是否开启切换效果,当状态置为false时,点击效果关闭,默认值为true。可以给Button绑定onClick事件,每当用户点击Button的时候,就会回调执行onClick方法,调用里面的逻辑代码。组件主要用来响应点击操作,可以包含子组件。:胶囊型按钮(圆角默认为高度的一半)。:普通按钮(默认不带圆角)。
React使用useEffect模拟生命周期
u014644574的博客
01-16 2437
React使用useEffect模拟生命周期
react 使用 useEffect 及踩坑
热门推荐
秋来九月八
02-25 2万+
useEffectreactHook最重要,最常用的hook之一。useEffect相当于react的什么生命周期呢?这个问题在react官网有过介绍,在使用的过程,容易被忽略,在面试的时候却经常被问及,(面试造航母,上班拧螺丝?
useEffect使用的介绍
前端精髓
08-23 5034
如果你熟悉 React class 的生命周期函数,你可以把 useEffect Hook 看做 componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合。 实现一个 componentDidMount 的功能 function Demo () { useEffect(() => { consol...
Reactuse.Effect()函数里的回调函数记录
Voiceu的博客
03-09 2639
useEffect可以用作componentWillUnmount(),需要写在回调函数里,并返回,比如取消计时器如下: const [count, setCount] = React.useState(0)//返回一个数组,第一个是状态state function unmount() { ReactDOM.unmountComponentAtNode(document.getElementById('root')) } React.useEffect(()
react hook打电话
最新发布
09-14
React Hooks是React 16.8版本引入的一种新的功能,它允许我们在函数组件直接使用状态管理(state)和生命周期方法,而不需要编写完整的类组件。其,`useState`、`useEffect`等就是常见的Hook。它们通常被称为...
写文章

热门文章

  • typescript中高级类型Record 61932
  • git常见错误: fatal: The current branch master has no upstream branch. 32512
  • 发布npm包遇到的报错: ERR! 403 Forbidden, Are you logged in as the correct user 17377
  • Electron结合React使用 15843
  • 本地创建新项目如何上传到gitlab仓库中 13928

分类专栏

  • 源码解析 7篇
  • 产品设计与技术架构 7篇
  • 异步专项 6篇
  • 计算机网络 14篇
  • jenkins 7篇
  • 安全专栏 10篇
  • Gitlab CI 9篇
  • python专栏 1篇
  • React 10篇
  • 性能专栏 5篇
  • UML 2篇
  • docker 3篇
  • iterm2 + ohmyzsh 2篇
  • nginx 1篇
  • javaScript 23篇
  • typeOrm 1篇
  • github 2篇
  • ESLint 4篇
  • vscode 1篇
  • npm 4篇
  • Electron 6篇
  • webstorm 2篇
  • node 14篇
  • git 14篇
  • Vue 3篇
  • TypeScript 6篇
  • 随笔 2篇
  • linux 12篇
  • MongoDB 2篇
  • Sourcetree 1篇
  • jQuery源码分析系列 2篇
  • webpack 3篇

最新评论

  • npm link介绍

    维李设论: link的方式其实也是pnpm和lerna快速的一个原因,所不同的是不同包管理器的不同版本对link的优化也不尽相同,所以如果使用link需要保证两侧的包管理器及版本一致,即:使用yarn 2.x就都使用yarn 2.x,使用npm 7.x就都使用npm 7.x

  • typescript 路径别名问题(别名设置 & 开发与打包时路径问题)

    学习Java的唐唐: 问下大佬,ecosystem.config.js,里面是什么内容

  • jenkins 中配置Node环境

    lsj980Ya: 我这边遇到找不到node命令,什么都配置好了

  • jenkins 中配置Node环境

    问白: 可以检查看看对应的node插件有没有安装

  • jenkins 中配置Node环境

    jianghx1024: 安装了在全局配置nodejs的时候版本没有下拉选择框时咋回事

最新文章

  • 一个好玩的浏览器插件
  • Redux中间件源码解析与实现
  • ReactRedux源码解析与实现
2023年62篇
2022年27篇
2021年3篇
2020年20篇
2019年38篇
2018年15篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

问白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家徐州卡通玻璃钢雕塑唐山玻璃钢人物雕塑价格连云港玻璃钢雕塑价格福建佛像玻璃钢雕塑批发通辽人物玻璃钢雕塑定制夏季商场美陈装饰玻璃钢花盆能太阳下晒吗哪里有春节商场美陈西宁户外玻璃钢雕塑定做延安仿铜玻璃钢雕塑价格汝州玻璃钢雕塑定制辽宁人物玻璃钢雕塑公司玻璃钢花盆雕塑工厂泰安玻璃钢企鹅雕塑平顶山佛像玻璃钢彩绘雕塑厂家山东特色玻璃钢雕塑生产厂家锻铜校园玻璃钢雕塑小品通化玻璃钢雕塑定制价格商场室外充气美陈玻璃钢雕塑背景音乐广州火烈鸟玻璃钢雕塑定制白银动物玻璃钢雕塑订做四川中庭商场美陈供货商西宁大型玻璃钢雕塑定制太原泡沫玻璃钢雕塑张掖卡通玻璃钢雕塑定做阜阳玻璃钢雕塑供应商安徽卡通玻璃钢雕塑造型玻璃钢雕塑加工厂加盟商场墙体美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化