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

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

Python自定义异常的全面指南(入门到实践)

《Python自定义异常的全面指南(入门到实践)》想象你正在开发一个银行系统,用户转账时余额不足,如果直接抛出ValueError,调用方很难区分是金额格式错误还是余额不足,这正是Python自定义异... 目录引言:为什么需要自定义异常一、异常基础:先搞懂python的异常体系1.1 异常是什么?1.2