【React】—hooks认知

2020-03-30  本文已影响0人  南慕瑶

一、为什么要引入 hooks ?

1.在组件之间复用状态逻辑很难

也就是说,在组件之间,复用 state,比较麻烦。

没有 hooks 的时代,我们通常会采用 render prop 或高阶组件的方式,来共享 state。

这类方案比较麻烦,使我们的代码变的难以理解。

【附】

render prop 是一个用于告知组件需要渲染什么内容的函数 prop。

也就是,给组件传递一个叫做 render 的 prop,这个 prop 是个函数,这个函数返回一个组件实例,用于渲染。当然,它也可以不叫 render,作为 prop 的名字,完全自定义即可。

【使用hooks】(自定义hooks)

你可以使用 Hook 从组件中提取状态逻辑,使得这些逻辑可以单独测试并复用。Hook 使你在无需修改组件结构的情况下复用状态逻辑。 这使得在组件间或社区内共享 Hook 变得更便捷。

2.复杂组件变得难以理解

(1)componentDidMount 中可能包含多个拉取数据的逻辑。多种逻辑放在一起,代码量大了,会不好维护。

(2)在 componentDidMount 注册的订阅事件,需要在 componentWillUnmount 中清除。相关逻辑被拆分,影响维护。

【使用hooks】(useEffect)

useEffect hooks,在 componentDidMount、componentDidUpdate、componentWillUnmount 三种生命周期下,都会进入。

3.难以理解的 class

(1)this 的指向、必须在 constructor 里面为方法手动绑定 this

(2)class 不能很好的压缩,并且会使热重载出现不稳定的情况

【使用hooks】(用hooks代替class)

Hook 使你在非 class 的情况下可以使用更多的 React 特性。 

二、Hook 使用原则

1.只能在函数最外层调用 Hook。不要在循环、条件判断或者子函数中调用。

2.只能在 React 的函数组件 或 自定义Hook中调用 Hook。不要在其他 JavaScript 函数中调用。

三、自定义 Hook

用于在组件之间复用状态(state)逻辑。

【注】

Hook 是一种复用 状态逻辑 的方式,它不复用 state 本身。事实上 Hook 的每次 调用 都有一个完全独立的 state —— 因此你可以在单个组件中多次调用同一个自定义 Hook。

自定义 Hook 更像是一种约定而不是功能。如果函数的名字以 “use” 开头并调用其他 Hook,我们就说这是一个自定义 Hook。 

上一篇 下一篇

猜你喜欢

热点阅读