React Hooks 基础教程:让你彻底掌握 Hooks

阅读时长 6 分钟读完

React Hooks 是 React 16.8 新增的特性,它可以让你在不编写类组件的情况下,复用 State 和其他 React 特性。使用 Hooks 之后,你可以在函数式组件内部使用 React 的 state 和生命周期等特性,使得代码更加简单和易于理解。本文将为你详细介绍 React Hooks 的基本概念,如何使用 Hooks 来编写函数式组件,并提供一些示例代码,让你建立起完整的 Hooks 技能体系。

Hooks 的基本概念

Hooks 是一些特殊的函数,给你的函数式组件添加了一些响应式功能。React Hooks 包含两类函数:State Hooks 和 Effect Hooks。

  • State Hooks:useState、useReducer
  • Effect Hooks:useEffect、useLayoutEffect、useCallback、useMemo、useRef 和 useContext

State Hooks

State Hooks 使得你能够在函数式组件中使用 state,及时更新你的 UI 。useState 是 State Hooks 中最常用的一个,它接受一个初始状态并返回一个包含当前状态及更新状态的函数。

-- -------------------- ---- -------
------ ------ - -------- - ---- --------

-------- --------- -
  ----- ------- --------- - ------------

  ------ -
    -----
      --------- -----------
      ------- ----------- -- -------------- - ----------------
      ------- ----------- -- -------------- - ------------------
    ------
  -
-
展开代码

在这个例子中,每次添加或减少都会更新 count 的状态,然后重新渲染计数器组件。

Effect Hooks

Effect Hooks 是 React 异步渲染的核心,通过它,你可以在组件挂载或卸载时执行一些副作用操作,例如发送异步请求或更新浏览器标签。useEffect 是最常用的 Effect Hooks 函数,它允许你在每次渲染时执行一些操作。

-- -------------------- ---- -------
------ ------ - --------- --------- - ---- --------

-------- ------- -
  ----- ------ -------- - ------------

  ------------ -- -
    ----- ----- - -------------- -- ------------ - --- ------
    ------ -- -- ---------------------
  -- --------

  ------ --------- ------- ------------
-
展开代码

在这个例子中,我们使用 useEffect 创建一个 Timer 组件。useEffect 会在每次组件渲染时执行,同时又会检测 time 是否发生变化。定时器会在渲染完成后启动,然后每秒更新一次 time 状态。在组件卸载时,我们使用 return 语句清除定时器,以免发生内存泄漏。

如何使用 Hooks

Hooks 函数可以使用在函数式组件中、自定义 Hooks 中等地方。使用它们的方式与使用其他 React 特性的方式相同。

setState

在函数式组件中使用 state,我们使用 useState 来替代 class 组件中的 setState

-- -------------------- ---- -------
------ ------ - -------- - ---- --------

-------- --------- -
  ----- ------- --------- - ------------

  ------ -
    -----
      --------- -----------
      ------- ----------- -- -------------- - ----------------
      ------- ----------- -- -------------- - ------------------
    ------
  -
-
展开代码

useEffect

useEffect 允许我们执行副作用操作。这些操作包括发送异步请求、订阅状态更新、监听浏览器事件、操作全局变量等等。我们可以在 useEffect 中执行这些操作,并返回一个运行副作用代码的函数。

-- -------------------- ---- -------
------ ------ - --------- --------- - ---- --------

-------- ------- -
  ----- ------- --------- - --------------- ----- -------

  ------------ -- -
    -------------- - ------
  ---

  ------ -----------------
-
展开代码

在这个例子中,每次组件渲染时,我们使用 useEffect 将 title 设置为 React Hooks Demo。这个操作只会在组件挂载时执行一次,之后组件重新渲染时, useEffect 就不会再执行了。如果第二个参数传递一个空数组,相当于告诉 React 只在挂载和卸载时执行。当 useEffect 依赖的值发生改变的时候, useEffect 也会再次执行,在此可以在第二个参数依赖中传递 useEffect 依赖的值。

useReducer

当我们需要修改的状态比较复杂时,我们就需要使用 useReducer 来管理状态。useReducer 是另一个 state Hooks 函数,它使用了 Redux 的思想,并将 reducer 和 state 作为两个不同的实体来处理。

-- -------------------- ---- -------
------ ------ - ---------- - ---- --------

-------- -------------- ------- -
  ------ ------------- -
    ---- ------------
      ------ - ------ ----------- - - --
    ---- ------------
      ------ - ------ ----------- - - --
    --------
      ----- --- --------
  -
-

-------- --------- -
  ----- ------- --------- - ------------------- - ------ - ---

  ------ -
    -----
      --------- -----------------
      ------- ----------- -- ---------- ----- ----------- ----------------
      ------- ----------- -- ---------- ----- ----------- ------------------
    ------
  -
-
展开代码

在这个例子中,我们使用 useReducer 来管理一个 count 状态。我们定义了一个 reducer 函数来处理各种 state 变化情况。使用 useReducer 时,你必须传递一个 reducer 函数和初始 state。

小结

在本文中,我们学习了 React Hooks 的基础概念,包括 state 和 effect 等 Hooks 函数,以及如何在函数式组件中使用它们。我们也讨论了如何使用 Hooks 来管理组件的状态和执行副作用操作。通过阅读示例代码,你已经掌握了基础的 React Hooks 技能,现在就开始将 Hooks 应用到你的下一个React项目中吧。

如果你想深入学习 React Hooks,我建议你去官网查看更多相关信息以及扩展阅读资料。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67bbeb7a306f20b3a6bc72a2

纠错
反馈

纠错反馈