「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。
之前用 class component,我们习惯了使用生命周期去处理很多问题,但是用了 react hooks 之后,需要考虑用hooks 如何实现。下面我们来一个一个介绍下内置的 hooks.
- useState: 让函数具有维持状态的能力 state 是 react 组件的一个核心机制, usestate 可以用来管理 state ,它让函数组件具有维持状态的能力。在一个函数组件多次渲染的之间,用 usestate 管理的 state 是共享的。 通过调用 set 方法,可以实现 state 的更新,并且会触发组件的刷新。 usestate 的一个好处是我们可以创建多个 state,使关注点能分离开来,不至于写成一坨浆糊。 state 之中应该保存什么样的内容,首先需要注意的是不要保存可以通过计算得到的值。比如:
- props 传递过来的值,需要计算下才能使用
- url 中读到的值
- 从 cookie 或者 localstorage 中读取的值 state 也有缺点,即组件如果需要重新创建,那么就需要恢复状态。我们可以利用统一的组件管理来降低这个复杂度,这样组件就变成了无状态,只负责展示。
- useEffect:执行副作用 副作用就是指和结果无关的代码。函数组件最终的返回是一段 ui,那么 useeffect 里的代码就是和渲染出来的ui无关的代码。 useeffect 虽然和之前的生命周期看起来有关系,但是不能像生命周期一样理解它。useeffect 是每次渲染完成后,判断一下依赖并且执行的代码。如果依赖为空数组,那么只初始化的时候执行一次,如果有依赖,那么判断一下是否变化,变化了执行一下啦。 通过返回一个组件注销时候执行的函数,来保证组件和副作用的一致性。
hooks 中依赖项的概念,在 usecallback 和 usememo 中也会用到。这个提供了监听数据变化的能力。定义依赖项目的时候需要注意:
- 依赖项需要在回调里用到
- 通过浅比较来确认依赖项是否发生变化
所有 hooks 都要在最外层,且按顺序执行。