react 进阶必学 hook (四):自定义hook

2024-04-17 20:32

本文主要是介绍react 进阶必学 hook (四):自定义hook,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

系列文章传送门:

react 进阶必学 hook (一):useState 来一碗大碗宽面

react 进阶必学 hook (二):useEffect 专治不吃宽面

react 进阶必学 hook (三):useContext 面馆分店开张了

react 进阶必学 hook (四):自定义hook

react 进阶必学 hook (五):额外的hook

什么是自定义hook

官网原话如下:

自定义 Hook 是一个函数,其名称以 “use” 开头,函数内部可以调用其他的 Hook,自定义 Hook 是一种自然遵循 Hook 设计的约定,而并不是 React 的特性

自定义hook有一下特性或是约定:

在这里插入图片描述

  • 自定义hook中可以调用其他hook
  • 必须以use开头,就像组件必须以大写字母开头一样
  • 自定义hook中管理state也是使用useState、useEffect,因为useState在调用的时候就是完全独立的

自定义hook解决了什么问题

想必开发人员对utils文件夹都很熟悉,在开发的时候我们会把经常使用的一些方法函数放到utils文件夹中,因为这些逻辑方法的复用率很高;同样自定义hook也是解决类似的问题。

React的组件思想其实就是一种将代码复用的做法,然而在编写组件的过程中又有一些逻辑是可以复用的,但是这些逻辑不需要在ui上展示或是有些组件不能在更细的拆分,因此我们可以将这些逻辑抽象成自定义hook,和组件的抽象不是一个纬度,就像抽象工厂模式;这种功能的抽象,严格控制输入输出,还有点函数式编程的思想,自定义的hook我们可以在不同的组件中使用,就像utils中的方法一样。

面馆例子

react 进阶必学 hook (三):useContext 面馆分店开张了中我们添加了一个统计一共卖出多少面的需求,每一个面馆卖出一碗面后都做了两个动作:

  1. 自己面馆的counter显式加一
  2. 面馆总计的counter显式加一

代码如下:

    const [count, setCount] = useState(0); const {counter, add} = useContext(context)useEffect(() => {            add()return window.alert(`一共卖出${counter}碗💪💪💪💪`)}, [count])

其中 const [count, setCount] = useState(0);是本面馆的counter,add()控制的是上下文中的总计的counter,两个是分开的,但是仔细想一下,这两个过程其实是严格绑定的,如果添加其他面的品类,添加新的逻辑就会分散导致不好维护,因此可以将这个逻辑写成一个hook。

1. 创建自定义hook

我们先创建一个自定义hook,命名为useCounter,因为要求必须以use开头:

export default function useCounter(initialState) {const [count,

这篇关于react 进阶必学 hook (四):自定义hook的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/912778

相关文章

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

SpringBoot+Vue3整合SSE实现实时消息推送功能

《SpringBoot+Vue3整合SSE实现实时消息推送功能》在日常开发中,我们经常需要实现实时消息推送的功能,这篇文章将基于SpringBoot和Vue3来简单实现一个入门级的例子,下面小编就和大... 目录前言先大概介绍下SSE后端实现(SpringBoot)前端实现(vue3)1. 数据类型定义2.

MySQL 数据库进阶之SQL 数据操作与子查询操作大全

《MySQL数据库进阶之SQL数据操作与子查询操作大全》本文详细介绍了SQL中的子查询、数据添加(INSERT)、数据修改(UPDATE)和数据删除(DELETE、TRUNCATE、DROP)操作... 目录一、子查询:嵌套在查询中的查询1.1 子查询的基本语法1.2 子查询的实战示例二、数据添加:INSE

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

kafka自定义分区器使用详解

《kafka自定义分区器使用详解》本文介绍了如何根据企业需求自定义Kafka分区器,只需实现Partitioner接口并重写partition()方法,示例中,包含cuihaida的数据发送到0号分区... 目录kafka自定义分区器假设现在有一个需求使用分区器的方法总结kafka自定义分区器根据企业需求

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多