React 词条目录
前端Wiki/词条/React Hooks

React Hooks

定义让函数组件拥有状态与副作用的一组内置 API(useState/useEffect/useRef…)

Hooks 之前,函数组件是「无状态」的纯展示组件,要状态必须写 class。Hooks(16.8+)把状态管理、副作用、上下文订阅等能力以函数形式开放:useState 存状态、useEffect 处理副作用、useRef 持有可变引用、useMemo/useCallback 做性能优化、useContext 读跨层上下文。

两条铁律必须背熟:① 只能在函数组件的最顶层调用(不能在循环/条件/嵌套函数里)——React 依靠调用顺序来对应每个 hook 的状态槽位;② 只能在函数组件或自定义 Hook 里调用。自定义 Hook(useXxx)是复用逻辑的手段:把状态相关逻辑打包,组件间共享。

HTML
const { useState, useEffect, useRef } = React;

function Demo() {
  const [count, setCount] = useState(0);       // 状态
  const inputRef = useRef(null);               // 持有引用(不触发重渲染)

  useEffect(() => {
    document.title = '点击 ' + count + ' 次';    // 副作用
  }, [count]);

  if (count < 0) {
    // useState(0); // ✗ 铁律:条件里调 hook,count 变化会错乱
  }

  return <input ref={inputRef} onClick={() => setCount(count + 1)} />;
}

// 自定义 Hook:逻辑复用单元
function useLocalStorage(key, init) {
  const [v, setV] = useState(localStorage.getItem(key) ?? init);
  useEffect(() => localStorage.setItem(key, v), [v]);
  return [v, setV];
}
⚠ 常见误区
🔗 相关词条useState 状态useEffect 副作用useMemo 与 useCallback
← 返回来源章节useState 状态基础