FumadocsZDecode
React

React 实例与函数组件

React 实例只存在于类组件中——每个类组件挂载时会 new 一个对象,持有 state、生命周期方法和 this。函数组件没有实例,每次渲染就是一次普通函数调用。


一、类组件 vs 函数组件

对比项类组件函数组件
实例有,每次挂载创建一个对象
this可用不可用
状态this.state / this.setStateuseState
生命周期componentDidMount 等方法useEffect
ref可直接引用实例需要 forwardRef

二、类组件迁移到函数组件

state:

// 类组件
class Counter extends Component {
  state = { count: 0 }
}

// 函数组件
function Counter() {
  const [count, setCount] = useState(0)
}

生命周期:

// 类组件
class Example extends Component {
  componentDidMount() {
    document.title = `Count: ${this.state.count}`
  }
}

// 函数组件
useEffect(() => {
  document.title = `Count: ${count}`
}, [count])

三、为什么推荐函数组件

  • 无实例化开销,打包体积更小
  • 没有 this 绑定问题
  • Hooks 让状态逻辑更容易复用和组合

本质区别

类组件是对象,有实例、有 this;函数组件是函数,每次渲染重新执行,没有实例。forwardRef + useImperativeHandle 是函数组件暴露"类实例方法"的唯一途径。

On this page