发布于 2026-01-06 0 阅读
0

2020 年最权威的 React Hooks 速查表 想要一份属于你自己的版本吗?🎁 目录 状态 Hook - useState 效果 Hook - useEffect 引用 Hook - useRef 回调 Hook - useCallback 上下文 Hook - useContext 记忆化 Hook - useMemo Reducer Hook - useReducer 自定义 Hook 接下来是什么?

2020 年最权威的 React Hooks 速查表

想要拥有属于你自己的那份吗?🎁

目录

状态钩子 - 使用状态

效果钩子 - 使用效果

引用钩子 - 使用引用

回调钩子 - 使用回调

上下文钩子 - useContext

记忆化钩子 - useMemo

变径钩 - 使用变径钩

定制钩子

接下来会发生什么?

自 React 16.8 版本引入 Hooks 以来,我们编写 React 应用的方式发生了改变。事实上,我们现在可以在函数组件中使用 React 的特性,例如状态和副作用。

然而,记住该用哪些钩子以及如何使用并不总是那么容易。

这就是我为你制作这份 React Hooks 速查表的原因,帮助你快速掌握它们。实际上,这里不仅仅只有一个简单的单页速查表。我还为每个 React Hooks 都提供了一些实际应用示例,以便你真正理解它们的使用方法和场景。

促销

想要拥有属于你自己的那份吗?🎁

随时随地携带这份速查表,点击此处下载PDF版本。

React Hooks 速查表.png

目录

  1. 状态钩子 - 使用状态
  2. 效果钩子 - 使用效果
  3. 引用钩子 - 使用引用
  4. 回调钩子 - 使用回调
  5. 上下文钩子 - useContext
  6. 记忆化钩子 - useMemo
  7. 变径钩 - 使用变径钩
  8. 定制钩子

状态钩子 - 使用状态

import React, { useState } from 'react';
Enter fullscreen mode Exit fullscreen mode
  • useState 是一个 Hook,它允许你将 React 状态添加到函数组件中。

  • useState返回当前状态以及用于更新该状态的函数。

  • useState接受初始状态值作为参数。

const MyComponent = (props) => {
  const [showModal, setShowModal] = useState(false);

  return (
    <div>
      <button onClick={() => setShowModal(true)}>Show</button>
      { show && <Modal /> }
    </div>
  );
};
Enter fullscreen mode Exit fullscreen mode
  • useState可以用于多个状态变量。
const MyComponent = (props) => {
  const [name, setName] = useState("Greg");
  const [country, setCountry] = useState("France");

  return <div>Hello! I'm {name}, from {country}.</div>;
};
Enter fullscreen mode Exit fullscreen mode
  • useState可以保存基本类型、对象或数组。
const [people, setPeople] = useState({
  name: "Greg",
  country: "France"
});
Enter fullscreen mode Exit fullscreen mode
  • useState在更新状态变量时总是替换它,而不是合并它。

  • 状态更新函数可以接受一个函数作为参数。该函数接收先前的状态值,并返回更新后的值。

const [people, setPeople] = useState({
  name: "Greg",
  country: "France",
  age: 28
});

...

setPeople(prevState => {
  return { ...prevState, age: prevState.age + 1 };
});
Enter fullscreen mode Exit fullscreen mode

效果钩子 - 使用效果

import React, { useEffect } from 'react';
Enter fullscreen mode Exit fullscreen mode
  • useEffect 是一个 Hook,它允许你在函数组件中执行“副作用”,例如数据获取、手动 DOM 操作等等……

  • useEffect接受一个函数作为参数。

  • useEffect在每次渲染后运行。

const MyComponent = ({ userId }) => {
  const [user, setUser] = useState({});

  useEffect(() => {
    fetch(`http://api.example.com/v1/users/${userId}`)
      .then(res => res.json())
      .then(data => setUser(data));
  });

  return (
    <ul>
      { friends.map(friend => <li key={friend.id}>{friend.name}</li>) }
    </ul>
  );
};
Enter fullscreen mode Exit fullscreen mode
  • useEffect接受第二个参数:依赖项数组。它告诉 React,只有当其中一个依赖项发生更改时,才运行 effect 函数。

  • 你可以传递一个空数组([])来使其只运行一次。

useEffect(() => {
  fetch(`http://api.example.com/v1/users/${userId}`)
    .then(res => res.json())
    .then(data => setUser(data));
}, [userId]);
Enter fullscreen mode Exit fullscreen mode
  • useEffect允许你通过返回清理函数来清理你使用过的任何效果。
useEffect(() => {
  window.addEventListener("mousedown", eventhandler);

  return () => {
    window.removeEventListener("mousedown", eventhandler);
  };
}, []);
Enter fullscreen mode Exit fullscreen mode

引用钩子 - 使用引用

import React, { useRef } from 'react';
Enter fullscreen mode Exit fullscreen mode
  • useRef允许你访问 DOM 元素。
const MyComponent = (props) => {
  const inputRef = useRef(null);

  useEffect(() => {
    inputRef.current.focus();
  });

  return (
    <form>
      <input ref={inputRef} type="text" />
    </form>
  );
};
Enter fullscreen mode Exit fullscreen mode

促销

回调钩子 - 使用回调

import React, { useCallback } from 'react';
Enter fullscreen mode Exit fullscreen mode
  • useCallback返回回调函数的记忆化版本。

  • useCallback接受一个回调函数和一个依赖项数组作为参数。

  • 只有当某个依赖项发生变化时,回调函数才会发生变化。

const MyComponent = ({ eventhandler }) => {
  ...
  const handleEventHandler = useCallback(
    event => {      
      if (typeof eventHandler === "function") {        
        eventHandler(event);      
      }    
    },    
    [eventHandler]
  );
  ...
Enter fullscreen mode Exit fullscreen mode

上下文钩子 - useContext

import React, { useContext } from 'react';
Enter fullscreen mode Exit fullscreen mode
  • useContext允许你从函数组件读取上下文并订阅其更改。

  • 上下文仍然需要通过React.createContext创建,并由上下文提供程序组件提供。

  • useContext接受 React.createContext 创建的上下文本身作为参数。

  • 它返回该上下文的当前上下文值。

const UserContext = React.createContext(null);

function App() {
  const [userName, setUserName] = useState("Greg");

  return (
    <UserContext.Provider value={{ name: userName }}>
      <Main />
    </UserContext.Provider>
  );
}

const Main = (props) => (
  <>
    <Header />
    <UserInfo />
    <Footer />
  </>
);

const UserInfo = (props) => {
  const user = useContext(UserContext);

  return <div>Hello, {user.name}!</div>;
};
Enter fullscreen mode Exit fullscreen mode

记忆化钩子 - useMemo

import React, { useMemo } from 'react';
Enter fullscreen mode Exit fullscreen mode
  • useMemo通过返回昂贵计算的记忆化值来帮助优化性能。

  • useMemo接受一个函数和一个依赖项数组作为参数。

  • 只有当其中一个依赖项发生更改时, useMemo 才会重新计算记忆化值。

const MyComponent = ({ a, b }) => {
  const memoizedValue = useMemo(() => expensiveComputation(a, b), [a, b]);
  ...
};
Enter fullscreen mode Exit fullscreen mode

变径钩 - 使用变径钩

import React, { useReducer } from 'react';
Enter fullscreen mode Exit fullscreen mode
  • useReducer允许你使用 reducer 来管理应用程序状态。它是状态钩子useState的替代方案。

  • useReducer接受一个类型为(state, action) => newState的 reducer 作为参数 。它返回当前状态和一个 dispatch 方法。

const initialState = { isAuth: false, user: null };

function reducer(state, action) {
  switch (action.type) {
    case "login": return { isAuth: true, user: action.user };
    case "logout": return { isAuth: false, user: null };
    default: return state;
  } 
}

function App() {
  const [state, dispatch] = useReducer(reducer, initialState);

  const handleLogin = () => dispatch({ type: 'login', user: { ... } );

  const handleLogout = () => dispatch({ type: 'logout' );

  if (state.isAuth) {
    return (
      <>
        <p>Welcome, {state.user.name}!</p>
        <button onClick={handleLogout}>Logout</button>
      </>
    );
  }

  return <button onClick={handleLogin}>Login</button>;
}
Enter fullscreen mode Exit fullscreen mode

定制钩子

  • 您可以创建自己的 React hooks,将组件逻辑提取到可重用的函数中。
import { useEffect, useCallback } from "react";

// Custom React Hook
export default function useEventListener(name, handler, element) {  

  const handleEventHandler = useCallback(
    event => {      
      if (typeof handler === "function") {        
        handler(event);      
      }    
    },    
    [handler]  
  );

  useEffect(
    () => {      
      // Check if the element supports the addEventListener method
      const checked = element && element.addEventListener;      
      // Stop here if not supported      
      if (!checked) return;      
      // Add event listener      
      element.addEventListener(eventName, handleEventHandler);      
      // Remove event listener on cleanup      
      return () => {       
        element.removeEventListener(name, handleEventHandler);
      };    
    },    
    [name, element, handleEventHandler] 
  );
}
Enter fullscreen mode Exit fullscreen mode

接下来会发生什么?

要完全掌握 React,需要学习的概念非常多。不过,有了这份速查表,你就可以开始使用现代 React 编写应用程序了。

您可以点击此处下载完整版的PDF格式速查表

促销

文章来源:https://dev.to/alterclass/the-react-hooks-cheatsheet-2020-hhj