警惕 React 中的“伪” Hooks

简介: ## 前言本来以为这是一个新手才会犯的小错误,但最近又在一个项目代码里看到这个问题,所以决定聊一下。## 什么是“伪” Hooks?你应该是第一次听说这个概念,但顾名思义,“伪” Hooks 就是指把一个不是 Hook 的函数起名为 `useXXX`,比如:```jsximport a from 'xxx';export function useA() { return

前言

本来以为这是一个新手才会犯的小错误,但最近又在一个项目代码里看到这个问题,所以决定聊一下。

什么是“伪” Hooks?

你应该是第一次听说这个概念,但顾名思义,“伪” Hooks 就是指把一个不是 Hook 的函数起名为 useXXX,比如:

import a from 'xxx';

export function useA() {
  return a;
}

如果想更好的了解“伪” Hooks,就需要更深入的理解 Hooks 的运作机制。

为什么不要写“伪” Hooks?

不必要的限制

我们都知道使用 Hook 的时候,有一些限制,这些限制是 Hooks 内部实现时不得已而加上的,它意味着副作用。
如果可以,React 一定不想把 API 加上 use 前缀。

给普通函数加上 Hooks 的限制,就是给调用方制造麻烦。

Hooks 具有传染性

如果一个函数依赖 Hooks,那么它自己就会变成 hook 或组件。如果你把一个基础的 API 搞成“伪” Hook 导出,在项目的代码里,就会出现一系列“伪” Hooks。

如何避免成为“伪” Hooks 制造者?

“伪” Hooks 并不难识别,通常,函数体内没有依赖 Hooks,那它就不应该是一个 Hook(可以搞一个 Linter 警告下)。

但写出“伪” Hooks 的人通常并不是不能识别它,而是犯了一个思维上的错。
通常我们遇到复杂或重复逻辑,都是提取出一个函数。但 Hooks 写多了,容易在潜意识里认为 Hooks 很酷,总想着“抽成一个 Hook”。就像有些 Java 程序员总想着搞一个 Class 或设计模式一样。

所以我们应该告诫自己 Hooks 意味着限制,意味着“脏”,是应该尽量避免的东西。

总结

这虽然是个小问题,甚至不会造成运行时的 Bug,但它真的是一个麻烦制造者。

Hooks 虽酷,但不要贪杯哦。

相关文章
|
6天前
|
前端开发 JavaScript
深入理解并实践React Hooks —— useEffect与useState
深入理解并实践React Hooks —— useEffect与useState
27 1
|
1月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
2月前
|
前端开发 JavaScript 安全
TypeScript在React Hooks中的应用:提升React开发的类型安全与可维护性
【7月更文挑战第17天】TypeScript在React Hooks中的应用极大地提升了React应用的类型安全性和可维护性。通过为状态、依赖项和自定义Hooks指定明确的类型,开发者可以编写更加健壮、易于理解和维护的代码。随着React和TypeScript的不断发展,结合两者的优势将成为构建现代Web应用的标准做法。
|
2天前
|
前端开发 JavaScript 开发者
深入探索React Hooks的魔力
深入探索React Hooks的魔力
21 10
|
22天前
|
JavaScript 前端开发 安全
[译] 使用 TypeScript 开发 React Hooks
[译] 使用 TypeScript 开发 React Hooks
|
23天前
|
前端开发 JavaScript API
React Hooks 的使用场景有哪些?
【8月更文挑战第25天】
38 2
|
24天前
|
存储 前端开发 JavaScript
React Hooks的魔法:如何在组件世界里施展响应式与复用的魔法
【8月更文挑战第27天】React Hooks 是自 React 16.8 起新增的功能,支持开发者在无需类组件的情况下利用 React 的状态管理和特性。本文通过实例展示了多种核心 Hooks 的使用方法:`useState` 用于实现响应式状态管理;`useEffect` 处理副作用操作,如数据获取等;`useMemo` 和 `useCallback` 有助于性能优化;`useRef` 则提供对 DOM 的直接引用。
27 2
|
6天前
|
前端开发 JavaScript
react hooks深拷贝后无法保留视图状态
react hooks深拷贝后无法保留视图状态
12 0
|
29天前
|
前端开发 JavaScript
react hooks深拷贝后无法保留视图状态
react hooks深拷贝后无法保留视图状态
|
20天前
|
前端开发 开发者 UED
数据校验的艺术:揭秘JSF如何将前端与后端验证合二为一,打造无缝用户体验
【8月更文挑战第31天】JavaServer Faces(JSF)是构建企业级Web应用的Java规范,提供了丰富的组件和API,便于快速搭建用户界面。JSF验证框架基于JavaBean验证API(JSR 303/JSR 380),利用注解如`@NotNull`、`@Size`等在模型类上定义验证规则,结合前端的`<h:inputText>`和`<h:message>`标签展示错误信息。
23 0

热门文章

最新文章