React组件根据定义形式的不同,可以分为函数组件与 class类组件
共同点
- 组件名称首字母大写
- 组件必须返回唯一的jsx父元素,一般是以
<></>闭合标签作为标识,当然用<div> </div>也一样 - 无论是使用函数或是类来声明一个组件,它决不能修改外界传递过来的
props,本质就是单向数据流,父组件改变了属性,那么子组件视图会更新
不同点
-
类组件使⽤的时候要实例化,⽽函数组件直接执⾏函数取返回结果即可。为了提⾼性能,现在的react前端项目开发一律用函数组件
-
this指向、生命周期、state状态,这些函数组件都没有,函数组件也被称为无状态的组件,只负责渲染的一些工作,函数组件是一个纯函数,执行完即销毁,无法存储 state。在16.8版本引入React Hooks 后才解决了问题,现在的函数组件也可以是有状态的组件,内部也可以维护自身的状态以及做一些逻辑方面的处理
-
对于class组件大型组件很难拆分和重构,变得难以测试;相同业务逻辑分散到各个方法中,可能会变得混乱;复用逻辑可能变得复杂,如 HOC、Render Props;每调用useHook一次都会生成一份独立的状态,通过自定义hook能够更好的封装我们的功能;编写
hooks为函数式编程,每个功能都包裹在函数中,整体风格更清爽,更优雅! -
写法上