ReactHook有哪些

React 中常用的 Hooks 列表及用法

React Hooks 是 React 16.8 版本引入的一项重要特性,它极大地简化和优化了函数组件的开发过程。以下是 React 中常用的 Hooks 列表及其详细用法:

1. useState

useState 是用于在函数组件中添加状态的 Hook。通过调用 useState,可以声明一个状态变量,并提供更新该状态的方法。

javascript 复制代码
const [state, setState] = useState(initialState);
  • state:当前的状态值。
  • setState:更新状态的函数。
  • initialState:状态的初始值。

示例:

javascript 复制代码
import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}
2. useEffect

useEffect 是用于处理副作用的 Hook,例如数据获取、订阅或手动 DOM 操作。它类似于类组件中的 componentDidMountcomponentDidUpdatecomponentWillUnmount 的组合。

javascript 复制代码
useEffect(effect, dependencies);
  • effect:副作用的回调函数。
  • dependencies:依赖项数组,当数组中的值发生变化时触发 effect

示例:

javascript 复制代码
import React, { useEffect, useState } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]);

  return (
    <button onClick={() => setCount(count + 1)}>
      Click me
    </button>
  );
}
3. useContext

useContext 是用于访问 React 的上下文(Context)的 Hook。它允许你从组件树中任何位置读取上下文值,而无需显式传递 props。

javascript 复制代码
const value = useContext(MyContext);

示例:

javascript 复制代码
import React, { createContext, useContext } from 'react';

const ThemeContext = createContext('light');

function App() {
  return (
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}

function Toolbar() {
  const theme = useContext(ThemeContext);
  return <div>Current theme is {theme}</div>;
}
4. useReducer

useReducer 是用于管理复杂状态逻辑的 Hook。它类似于 Redux 的 reducer 函数,适合处理多个状态值或复杂的更新逻辑。

javascript 复制代码
const [state, dispatch] = useReducer(reducer, initialState);

示例:

javascript 复制代码
import React, { useReducer } from 'react';

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      throw new Error();
  }
}

function Counter() {
  const [state, dispatch] = useReducer(reducer, { count: 0 });
  return (
    <div>
      Count: {state.count}
      <button onClick={() => dispatch({ type: 'increment' })}>+</button>
      <button onClick={() => dispatch({ type: 'decrement' })}>-</button>
    </div>
  );
}
5. useCallback

useCallback 是用于记忆函数的 Hook。它可以防止因为组件重新渲染导致方法被重新创建,起到缓存作用。

javascript 复制代码
const memoizedCallback = useCallback(callback, dependencies);

示例:

javascript 复制代码
import React, { useCallback, useState } from 'react';

function ParentComponent() {
  const [count, setCount] = useState(0);

  const handleChildClick = useCallback(() => {
    console.log('Child clicked');
  }, []);

  return <ChildComponent onChildClick={handleChildClick} />;
}
6. useMemo

useMemo 是用于记忆计算结果的 Hook。它仅会在某个依赖项改变时才重新计算 memoized 值,从而避免不必要的开销。

javascript 复制代码
const memoizedValue = useMemo(computeFunction, dependencies);

示例:

javascript 复制代码
import React, { useMemo, useState } from 'react';

function ExpensiveComponent() {
  const [count, setCount] = useState(0);

  const expensiveValue = useMemo(() => computeExpensiveValue(count), [count]);

  return (
    <div>
      <p>Expensive Value: {expensiveValue}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}
7. useRef

useRef 是用于创建一个可变的引用对象的 Hook。它适用于保存 DOM 引用、计时器 ID 或其他不触发重新渲染的值。

javascript 复制代码
const refContainer = useRef(initialValue);

示例:

javascript 复制代码
import React, { useRef } from 'react';

function TextInputWithFocusButton() {
  const inputEl = useRef(null);

  const onButtonClick = () => {
    inputEl.current.focus();
  };

  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>
  );
}
8. useLayoutEffect

useLayoutEffect 类似于 useEffect,但会在所有的 DOM 变更之后同步调用。它适用于需要测量布局并同步执行某些操作的场景。

javascript 复制代码
useLayoutEffect(effect, dependencies);
9. useImperativeHandle

useImperativeHandle 是用于自定义暴露给父组件的实例值的 Hook。它通常与 ref 配合使用。

javascript 复制代码
useImperativeHandle(ref, createHandle, dependencies);
10. useDebugValue

useDebugValue 是用于在开发者工具中显示自定义 Hook 的调试标签的 Hook。

javascript 复制代码
useDebugValue(value);

总结

javascript 复制代码
useImperativeHandle(ref, createHandle, dependencies);
10. useDebugValue

useDebugValue 是用于在开发者工具中显示自定义 Hook 的调试标签的 Hook。

javascript 复制代码
useDebugValue(value);

总结

相关推荐
子兮曰4 小时前
async/await高级模式:async迭代器、错误边界与并发控制
前端·javascript·github
恋猫de小郭4 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
GIS之路6 小时前
ArcGIS Pro 中的 Notebooks 入门
前端
IT_陈寒8 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
gxp1238 小时前
初学React:请求数据参数未更新 && 数据异步状态更新问题
react.js
Kagol9 小时前
TinyVue 支持 Skills 啦!现在你可以让 AI 使用 TinyVue 组件搭建项目
前端·agent·ai编程
柳杉9 小时前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau9 小时前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生9 小时前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
天蓝色的鱼鱼9 小时前
模块化与组件化:90%的前端开发者都没搞懂的本质区别
前端·架构·代码规范