前端/移动开发面试题更新 2026-08-05

在函数组件中使用的 useState 与类组件中的 this.state 在使用方式和行为上有哪些不同?

前端/移动开发技术原理React

考察说明

考查对 React 中类组件状态管理与函数组件 Hooks 状态管理的理解,尤其是声明方式、更新机制与使用场景的差异。

回答思路

  1. 【回答框架 1】useState 是函数组件中定义状态的方式,它返回一个由当前状态和更新函数组成的数组,例如 const [count, setCount] = useState(0)。而 this.state 是类组件中的实例属性,必须在 constructor 中初始化,或者使用 class fields 语法直接声明。
  2. 【回答框架 2】更新的方式不同:useState 的 setState 函数可以直接接收新值或函数式更新,例如 setCount(c => c + 1),并且每次调用都会触发重新渲染。类组件中的 this.setState 是合并更新,自动浅合并对象,且支持回调函数作为第二个参数。
  3. 【回答框架 3】useState 的更新是异步的,但不像 this.setState 那样提供回调,而是依靠 useEffect 来响应状态变化。此外,useState 在每次渲染中都是独立的,而 this.state 在类组件的整个生命周期内都是同一个对象。
  4. 【关键点 1】useState 用于函数组件,this.state 用于类组件,前者返回数组,后者是对象属性。
  5. 【关键点 2】useState 的 setState 不是自动合并对象,而是直接替换状态;类组件的 this.setState 会进行浅合并。
  6. 【关键点 3】两者更新状态都是异步的,但类组件可以通过回调获取更新后的值,函数组件需要依赖 useEffect。
  7. 【易错点 1】不要在类组件中直接修改 this.state 的值,必须使用 this.setState。
  8. 【易错点 2】在函数组件中,使用 useState 时,setState 不会像 this.setState 那样自动合并对象,需要手动处理。
  9. 【易错点 3】注意 useState 的初始值只在首次渲染时生效,后续渲染不会重新执行初始值计算。