react函数组件和类组件

3 篇文章 0 订阅

定义组件有两个要求:

  1. 组件名称必须以大写字母开头
  2. 组件的返回值只能有一个根元素

函数组件

function Welcome (props) {
  return <h1>Welcome {props.name}</h1>
}
ReactDOM.render(<Welcome name='react' />, document.getElementById('root'));

函数组件接收一个props对象,并返回一个React元素

类组件

class Welcome extends React.Component {
  render() {
    return (
      <h1>Welcome { this.props.name }</h1>
    );
  }
}
ReactDOM.render(<Welcome name='react' />, document.getElementById('root'));
  • 无论是使用函数或是类来声明一个组件,它决不能修改它自己的 props。
  • 所有 React 组件都必须是纯函数,并禁止修改其自身 props 。
  • React是单项数据流,父组件改变了属性,那么子组件视图会更新。
  • 属性 props 是外界传递过来的,状态 state 是组件本身的,状态可以在组件中任意修改
  • 组件的属性和状态改变都会更新视图。

区别

函数组件和类组件当然是有区别的,而且函数组件的性能比类组件的性能要高,因为类组件使用的时候要实例化,而函数组件直接执行函数取返回结果即可。若不考虑React16.8后增加的Hooks属性,为了提高性能,尽量使用函数组件。

区别函数组件类组件
是否有 this没有
是否有生命周期没有
是否有状态 state没有

React16.8 版本后对 Function Component 增加 Hook 的特性,使得函数组件拥有了终于自己的一套私有状态的管控方案。

在开发方式就有很大的不同,主要分为以下几点:

区别类组件函数组件
开发模式FP 函数式编程OOP 面向对象编程
生命周期useEffectuseLayoutEffect(Hook 特性)
this不存在存在
性能优化处理利用 React.memo 缓存渲染结果(多次触发 Render 情况下只取最后的渲染结果)采用 ShouldComponentUpdate 进行状态浅比较,控制是否更新
设计模式组合继承

虽然最终组件的显示结果基本没有什么差异(非极端情况下),但是函数组件相比类组件而言更为容易管控,测试,复用性更强。

利用 Hook 特性,函数可以将有关联的业务逻辑集中开发,而类组件需要根据对应的构造函数进行业务开发,业务逻辑有时会比较离散,通过生命周期包含的业务逻辑不好管控。

函数组件更具有未来趋势,类组件缺乏未来发展趋势的原因主要有:

  • this 具有模糊性,有的时候对 this 的指向认知可能不是那么的友好;
  • 业务逻辑散落在生命周期中,失去了集中性,对后期的迭代维护需要一定的精力;
  • 组件复用性性低,缺乏标准的拆分方式;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值