React Hooks的学习与自我理解

对 React hooks 的理解 阅读详情

存在的意义

        Hooks的作用在于完美过渡React中的类写法到函数式表示,因为我们知道React的函数式表示是不能使用生命周期的,Hooks可以代替React中的生命周期写法,这样就可以帮助完美过渡到函数式表示。这么做的意义是,类和生命周期的写法,不得不将不同的类互相联系起来,导致其中的业务逻辑会因为生命周期交错在一起而使得业务逻辑复杂难以维护
        我对Hooks想要解决的情况可能有更深的感悟,因为原来技术栈是vue,vue2的写法相比react类的写法使得组件之间的混用显得异常困难,即使是利用mixin也没办法妥善地去对一些关键业务尽量复用封装,甚至有可能会因为组件祖孙逻辑缠绕过深而导致所谓的“回调地狱”的情况,vue3的解决方式便是借鉴了react的hooks写法,去暴露一些核心的api,使得代码逻辑可以不因为所谓固定的结构受到限制,可以更加灵活地复用其中的公共部分,也许这就是hooks最大的意义所在

State Hook

        在React中我们将与视图相关的变量定义在state中,在React的类定义模式下,定义在constructor中,如下代码:

class Example extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            count: 1
        }
    }
    render() {
        return (
            <div>{this.state.count}</div>
        );
    }
}    

        我们知道,在React中,我们如果使用函数式表达,是没有构造函数的,所以React暴露了一个hook, useState去代替在constructor中定义state,如下代码:

import React, { useState } from 'react'
const Example = (props) => {
    const [count, setCount] = useState(1);
    return (
        <div>{count}</div>
    )
}

        不难理解,这里我们传递给useState一个1的参数,这个对应count的值,useState会返回一个包含声明的变量以及其set方法的数组,这里我们使用解构去获得它,这个count与直接声明的普通的count变量最大的不同在于
        我们声明了一个叫 count 的 state 变量,然后把它设为 0。React 会在重复渲染时记住它当前的值,并且提供最新的值给我们的函数。我们可以通过调用 setCount 来更新当前的 count。
        没错,它的更新变化会与视图的渲染相关,如果是普通的变量,后面在变量变化的时候,视图并没办法捕捉到变量的变化,并做出响应。

Effect Hook

        Effect Hook的存在其实就是为了替代类定义中使用的生命周期方法,提供一种在组件中进行副作用操作的方案

无需清除的effect

        无需清除的effect的是指有的时候我们需要在react更新dom进行一些额外的代码,并且在执行完以后我们可以选择忽略它们,这些就是无需清除的effect,举个例子说明一下:

import React, { useEffect } from 'react';
function Example() {
    useEffect(() => {
        document.title = `You clicked ${count} times`;
    })
}

        这样就会在每次渲染之后,将document的title做一个修改,使用Effect Hook我们就不需要考虑“挂载”还是“更新”了,将会保证执行在每次渲染之后。

需要清除的effect

        其实很简单,用于替代destroy的生命周期,只需要在无需清除的基础上加一个返回值即可

import React, { useEffect } from 'react';
function Example() {
    useEffect(() => {
        document.title = `You clicked ${count} times`;
        return function() {
            console.log('清除');
        }
    })
}

        与更新的操作类似,清除也会在每次渲染之后执行,因为这个机制的原因,我们可以避免很多bug,因为不需要区分挂载和更新了,所有的监听清除会一一对应地在每次渲染之后执行

跳过不必要的effect以提高性能

        上文我们提到,effect会在每次渲染之后都执行,但是实际上,我们并不一定需要每次渲染之后都执行effect的,有可能在满足一些条件,比如变量改变的情况下才执行effect,所以api额外提供了一个参数来实现这个情况,如下代码:

useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // 仅在 count 更改时更新

        像上面的例子,只有在渲染之后,对比count发生了改变才会执行effect,否则就会跳过这个effect来达到性能优化的目的

自定义hook

        其实就是提取公共逻辑作为单独的工具类函数而已,唯一要注意的点是,自定义 Hook 必须以 “use” 开头,官方的解释是:
        这个约定非常重要。不遵循的话,由于无法判断某个函数是否包含对其内部 Hook 的调用,React 将无法自动检查你的 Hook 是否违反了 Hook 的规则。
        同时我们也要注意的是,自定义hook并不会共享调用位置的state,所以useState要与自定义hook一并封装,不然就会导致逻辑上意料之外的问题

其他

        还有一些其他的hook,看了一下文档,都不是那么常用,后面需求需要再进一步学习加深印象

React-Hooks 和 React-Redux React-Hooks 的 使用 React-redux 的 使用 阅读详情

相关推荐

React Hooks

趣味解析之React Hooks

m0_72030584的博客 953

react hooks 事件监听

react hooks 事件监听说明useEffectuseEffect执行一次useEffect绑定和解绑事件问题:变量和state值不变且是初始值监听事件解决方法1解决方法2 说明 dom监听事件的绑定和解绑只执行一次。在react hooks中实现,需要使用useEffect。 useEffect 简单了解下useEffect是做什么的?React 组件在渲染后执行某些操作( DOM 更新之后调用useEffect的第一个参数函数),还有默认情况下,它在第一次渲染之后和每次更新之后都会执行。 useE

weixin_39999684的博客 9375

在 React Native 中使用 Hooks

React官方在 2018 ReactConf 大会上宣布 React v16.7.0-alpha(内测) 将引入 Hooks。什么是Hooks,我们来了解一下。 什么是Hooks? 在平时开发过程中,我们一般都会遇到如下问题: 1. 难以重用和共享组件中的与状态相关的逻辑 2. 逻辑复杂的组件难以开发与维护,当我们的组件需要处理多个互不相关的 state 时,每个生命周期函数中可能会包含...

... 8105

React Hooks 介绍及与传统 class 组件的生命周期函数对比

React Hooks 介绍 及与传统 class 组件的生命周期函数对比 为什么要使用 Hooks 在 React 16.8 之前,函数组件也称为无状态组件,因为函数组件也不能访问 react 生命周期,也没有自己的状态。react 自 16.8 开始,引入了 Hooks 概念,使得函数组件中也可以拥有自己的状态,并且可以模拟对应的生命周期。 我们应该在什么时候使用 Hooks 呢? 官方并不建议我们把原有的 class 组件,大规模重构成 Hooks,而是有一个渐进过程: 首先,原有的函数组件如果需要自

诗渊的博客 3687

ReactJS_1:从基础到进阶的全面学习

本文还有配套的精品资源,点击获取 简介:ReactJS是由Facebook开发的开源JavaScript库,以其组件化开发和虚拟DOM特性为核心,用于构建高效的用户界面。本资料包提供了从基础知识到高级应用的完整学习路径,包括但不限于组件的props和state管理、React Router路由配置、React Hooks的使用、环境配置、测试工具应用、性能优化技巧,以及与其...

weixin_35935514的博客 1512

提升仿真效率:Synopsys VCS高级编译选项优化技巧(2023最新版)

本文深入探讨了Synopsys VCS 2023版本中的高级编译选项优化技巧,帮助工程师提升仿真效率。通过并行编译、智能代码分析、精准覆盖率采样等策略,结合真实案例展示如何显著缩短仿真周期并优化资源使用,适用于数字芯片验证和大型SoC设计。

weixin_30338481的博客 114

react native Hooks 初体验

从官方文档中,我们可以得到以下的一些特性: 完全可选的。 你无需重写任何已有代码就可以在一些组件中尝试 Hook。但是如果你不想,你不必现在就去学习或使用 Hook。 100% 向后兼容的。 Hook 不包含任何破坏性改动。 现在可用。 Hook 已发布于 v16.8.0。 不能再 class 里面使用 没有计划从 React 中移除 class。 你可以在本页底部的章节读到更多关于 Hook 的渐进策略。 Hook 不会影响你对 React 概念的理解。 恰恰相反,Hook 为已知的 React 概念

-霄-的博客 704

ESP32-S3驱动雨滴传感器实战:从原理到ADC/GPIO双模式数据采集

本文详细介绍了ESP32-S3驱动雨滴传感器的实战教程,涵盖其工作原理及ADC/GPIO双模式数据采集方法。通过解析传感器利用水的导电性检测雨量的核心机制,提供了完整的硬件连接方案与软件驱动代码,包括模拟量(AO)的ADC读取和数字量(DO)的GPIO读取,并附有调试技巧,帮助开发者快速实现雨滴检测功能。

weixin_32005771的博客 154

React Hooks学习指北

自定义hooks是在基础上的一个拓展,可以根据业务需要制定满足业务需要的hooks,更注重的是逻辑单元。通过业务场景不同,我们到底需要做什么,怎么样把一段逻辑封装起来,做到复用,这是自定义hooks产生的初衷。hooks 专注的就是逻辑复用, 是我们的项目,不仅仅停留在组件复用的层面上。hooks让我们可以将一段通用的逻辑存封起来。将我们需要它的时候,开箱即用即可。

weixin_41086056的博客 1469

Win11大版本更新失败:系统保留分区空间不足的终极解决方案

本文针对Windows 11大版本更新时遇到的“系统保留分区空间不足”错误,提供了详细的诊断与解决方案。核心问题在于EFI系统分区(ESP)空间过小,导致更新失败。文章重点介绍了使用傲梅分区助手等第三方工具安全扩展EFI分区的完整步骤,并提供了手动清理、使用安装介质修复等替代方案,帮助用户彻底解决更新障碍,顺利完成Win11升级。

weixin_29280219的博客 953

QT日志输出终极指南:从qDebug到qFatal的完整文件记录方案

本文深入探讨了QT日志系统的企业级文件记录方案,从基础的qDebug、qWarning、qCritical、qFatal等宏的使用,到构建自定义消息处理器、实现异步写入、分级存储、日志轮转及性能监控等高级功能。旨在帮助开发者构建一个稳定、高效且易于维护的专业级日志管理架构,适用于桌面应用、嵌入式系统及服务端程序。

ik678901234的博客 909

React为什么要使用Hooks?

【代码】React为什么要使用Hooks?

2401_89241768的博客 1182

AC360变频器使用案例

AC360变频器使用案例!

QING_BOSS的博客 517

React开发高级篇 - React Hooks以及自定义Hooks实现思路

初始状态(initialState):这是 state 的初始值。更新函数(setState):这是一个你可以调用以更新 state 的函数。当前状态(current state):这是 state 的当前值。更新函数(setState):用于更新 state 的函数。具体解释:useState 允许你在函数组件内部使用状态。这是通过将状态存储在组件的执行上下文中实现的,而不是像类组件那样存储在实例对象中。

qq_37779333的博客 1985

即梦AI使用教程

摘要: 即梦AI是字节跳动推出的多模态AI创作平台,整合图片、视频、智能编辑功能,基于OmniHuman模型支持中英日三语操作。核心特点包括: 技术升级:4.0版本强化中文语义理解与微观表现力,新增故事分镜生成; 创作功能:支持文本/图片转视频、AI对口型、商业级抠图与多图层融合; 用户友好:移动/网页双端适配,灵感社区复用提示词,剪映生态无缝衔接; 应用场景:覆盖电商换装、虚拟主播、设计融合等需求,未来将开放API拓展生态。 (字数:149)

专业深耕,技术前沿 6307

Arduino DHT11 ESP8266 在OneNet云平台上读取 温湿度

#include "ESP8266.h" #include "dht11.h" #include "SoftwareSerial.h" #define SSID "540ND" #define PASSWORD "" #define HOST_NAME "api.heclouds.com" #define DEVICE_ID "" #define HOST_PORT (80) String APIKey = " "; #define INTER

weixin_45852947的博客 2430

React大学习4(Hooks)

React Hooks 是让函数组件具备状态管理和生命周期能力的特殊函数。主要解决了类组件复杂、逻辑复用困难的问题,使代码更符合函数式编程范式。常用 Hooks 包括: useState:管理组件内部状态,提供状态值和更新函数。注意更新是异步的,且需避免直接修改对象/数组。 useEffect:处理副作用(如请求、定时器),替代生命周期方法。需注意依赖数组控制执行时机,避免闭包陷阱。 使用 Hooks 需遵循三条规则:只在函数组件顶层调用、保持调用顺序一致、以use开头命名。开发时需警惕闭包问题,合理处理依

m0_74037439的博客 751

【YOLOv11多模态融合改进】(可见光+红外)涉及像素级融合、特征级融合(中期、中后期、后期)、决策级融合的完整配置步骤以及二次改进方案

在网络输入阶段将多模态数据直接合并,形成统一的特征表示。

Limiiiing的博客 1968

深入理解 React Hooks

React Hooks 是 React 16.8 引入的核心特性,它使函数组件能够管理状态、处理副作用并复用逻辑,从而减少对类组件的依赖。本文系统介绍了常用 Hooks,深入探讨了 Hooks 的设计原理,强调调用规则和依赖数组的作用,帮助开发者避免常见陷阱。通过合理运用 Hooks,开发者可以编写更简洁、高效且易于维护的 React 代码,适应现代前端开发需求。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 1514

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

如何将Redux与React Hooks一起使用

在本文中,让我们一起来学习如何将Redux与React Hooks一起使用。 React Redux在2019年6月11日发布的7.1版中提供了对Hooks的支持。这意味着您可以在函数组件中将Redux与Hooks一起使用,而不是使用高阶组件(HOC)。 什么是Hook? Hook是在React版本16.8中引入的,可以让我们访问函数组件中的状态和生命周期方法。 让我们看一个例子。 ...

ETHAN IN IT 3438

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

react hooks--概述

◼Hook是 React 16.8 的新增特性,它可以让我们在不编写class的情况下使用state以及其他的React特性(比如生命周期)。◼我们先来思考一下class组件相对于函数式组件有什么优势?◼ class组件可以定义自己的state,用来保存组件自己内部的状态; 函数式组件不可以,因为函数每次调用都会产生新的临时变量;◼ class组件有自己的生命周期,我们可以在对应的生命周期中完成自己的逻辑; 比如在componentDidMount中发送网络请求,并且该生命周期函数只会执行一次;

小白小白从不日别的博客 1969

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

React Hooks 原理与最佳实践

大家好,我是若川。持续组织了8个月源码共读活动,感兴趣的可以点此加我微信ruochuan12参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》包含20余篇源码文章。历史面试系列。另外:目前建有江西|湖南|湖北籍前端群,可加我微信进群。React Hooks 是 React 16.8 引入的新特性,允许我们在不使用 Cl...

u012384510的博客 1348

React学习七(React Hooks)

文章目录一、为什么会有Hooks 一、为什么会有Hooks &bbsp;&bbsp;&bbsp;&bbsp;&bbsp;&bbsp;React的组件创建方式,一种是类组件,一种是纯函数组件,并且React团队希望,组件不要变成复杂的容器,最好只是数据流的管道。开发者根据需要,组合管道即可。也就是说组件的最佳写法应该是函数,而不是类。 纯函数组件有着类组件不具备的多种特点: ①纯函数组件没有状态 ②纯函数组件没有生命周期 ③纯函数组件没有this ...

qq_44872688的博客 1413

7. React Hooks

Hook的出现,可以解决上面提到的这些问题;简单总结一下hooks:它可以让我们在不编写class的情况下使用state以及其他的React特性;但是我们可以由此延伸出非常多的用法,来让我们前面所提到的问题得到解决;Hook的使用场景:Hook的出现基本可以代替我们之前所有使用class组件的地方;但是如果是一个旧的项目,你并不需要直接将所有的代码重构为Hooks,因为它完全向下兼容,你可以渐进式的来使用它;Hook只能在函数组件中使用,不能在类组件,或者函数组件之外的地方使用。

草木红的博客 1261

React Hooks 源码学习

React Hooks 添加于 React 16.8,用于 React 中函数组件的一类特殊函数,它们允许你在不编写类组件而是使用简单的函数组件(Function Component,以下称FC)的情况下依然享受到状态、上下文、副作用等 React 特性。自定义 Hook 是一个函数,其名称以 “use” 开头,函数内部可以调用其他的 Hook。// 下面自定义了一个获取窗口长宽值的hooks}...

发果叁 594
上一篇: 全面剖析javascript原型
下一篇: React Router学习笔记
祯民
博客等级 码龄9年 72粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值