002-函数组件与类组件的区别
类组件需要声明constructor,函数组件不需要 类组件需要手动绑定this,函数组件不需要 类组件有生命周期钩子,函数组件没有 类组件可以定义并维护自己的state,属于有状态组件,函数组件是无状态组件 类组件需要继承class,函数组件不需要 类组件使用的是面向对象的方法,封装:组件属性和方法都封装在组件内部 继承:通过extends React.Component继承;函数组件使用的是函数式编程思想 语法上: 类组件需要继承React.component,创建render函数,返回React元素,而函数式组件接受一个props参数,直接返回React元素 状态管理上: 类组件可是使用state来管理组件内部的状态,而函数式组件没有状态管理,没有this,没有state,也没有生命周期 调用方式上: 函数式组件可以直接调用,返回一个react元素,而类组件是创建实例然后调用实例的render方法,返回react元素
why React hooks 优点:
告别难以理解的class组件 解决业务逻辑难以拆分的问题 使状态逻辑复用变的简单可行 函数组件从设计理念来看,更适合react
局限性: hooks还不能完整的为函数组件提供类组件的能力 函数组件给了我们一定程度的自由,却也对开发者的水平提出了更高的要求 Hooks 在使用层面有着严格的规则约束
hook的作用
hook使开发者能在函数式组件中使用state,以及其他react特性 useEffect使开发者能在函数式组件中使用react生命周期特性 hook能简化逻辑复用,更好的复用代码, 可以很容易的拆分大型组件,使代码更容易理解
主要不同点如下:
类组件有生命周期,函数组件没有; 类组件依赖class创建,函数组件通过return返回创建; 类组件有状态存储,函数组件需要依赖Hook完成状态存储; 类组件中有this指向问题需要特别注意,函数组件则没有this; 类组件消耗大,需要创建实例,且不能销毁;函数组件消耗少,得到结果就销毁;
函数组件语法更短、更简单,这使得它更容易开发、理解和测试。 类组件大量使用 this 而让人感到困惑。使用功能组件可以很容易地避免这种缺点,保持代码整洁。 业务逻辑复杂,用类组件更易于我们维护,也相应降低了开发成本。 函数组件多用于简单功能模块封装,便于复用;
常见的hook函数
useEffect useState useCallback useMemo useReducer useContext useRef React 自定义hook 当项目中需要实现某些特定功能,而官方提供的hook不足以满足需求的时候我们可以自定义hook
自定义hook需要遵循的 规则:
自定义hook本质上是一个函数,命名以use开头, 自定义hook内部能正常的使用useState,useEffect或其他hook 自定义返回结果 在不同组件中使用hook不会共享state 每次调用hook都能获取独立的state