Hasty Briefsbeta

双语

How Are Function Components Different from Classes? — overreacted

13 hours ago
  • 函数组件通过闭包捕获特定渲染的props和state,从而避免了类组件中可变的`this`导致的bug。
  • 类组件从`this.props`或`this.state`中读取数据,这些数据是可变的,可能会导致在异步回调(如定时器)中获取到错误的值。
  • 要修复类组件中的bug,开发者通常显式传递props或在`render`中使用闭包,而闭包是函数组件天然具备的特性。
  • 同样的原则也适用于Hooks:函数组件在渲染时捕获状态,确保在异步处理程序中的行为正确。
  • 要读取最新的props或state,可以使用`useRef`作为逃生舱,但这需要手动管理,并非默认行为。
  • Hooks中的过时闭包通常是由于对值稳定性的错误假设;闭包本身是一个提高正确性的特性。
  • 函数组件和类组件之间的性能差异可以忽略不计;选择取决于思维模型和代码清晰度。