useState 是 React 函数组件最基础的 Hooks,用于管理状态,面试常考原理、使用注意点,很多新手会踩异步更新、直接修改状态的坑,回答时要重点强调。
核心要点:
一、核心原理
useState 本质是“状态钩子”,用于在函数组件中保存状态,每次组件重新渲染时,useState 会返回当前的状态值和修改状态的函数(setState)。React 会为每个组件维护一个“状态队列”,记录 useState 定义的状态,确保每次渲染时状态的一致性。
二、使用注意点(高频坑)
- 状态是异步更新的:setState 不会立即修改状态值,而是将修改请求加入队列,等组件重新渲染时才会更新状态,因此不能在 setState 后立即获取最新状态。
示例:
const [count, setCount] = useState(0)
const add = () => {
setCount(count + 1)
console.log(count) // 输出 0,不是 1,因为 setState 是异步的
}
-
连续多次 setState 会批量更新:如果连续调用多次 setState,React 会合并这些更新,只执行一次重新渲染,提升性能。
-
不能在条件、循环、嵌套函数中使用 useState:Hooks 必须在函数组件顶层调用,否则 React 无法保证状态的顺序和一致性,会报错。
-
引用类型不能直接修改:对于数组、对象等引用类型,不能直接修改原数据,必须返回一个新的引用(如 [...arr, newItem]、{...obj, key: newVal}),否则无法触发组件更新。
——个人观点 · 仅供参考——