挂钩是React 16.8的新功能,它允许您在不编译类的情况下使用状态和其他React功能。
Hook是React团队在React 16.8版本中提出的新功能。在遵循功能组件的前提下,它为已知的React概念提供了更直接的API,状态,上下文,参考和声明周期。多年的类组件中存在的各种问题,请实现更有效的编写React组件
挂钩是JavaScript函数。使用它们时,还有两个额外的规则:
在组件中,通过判断挂钩调用的顺序来确定相应的对应关系,因此有必要确保挂钩呼叫的顺序在多个渲染之间保持一致,以便判断React,以确保React可以正确地关联内部状态和相应的状态。钩协会。
用于调用组件以在函数组件中添加一些内部状态。在正常情况下,纯粹的功能在状态副作用中不可能存在。通过调用钩函数
唯一的参数是返回当前状态和状态更新函数的初始状态,返回状态更新功能不会合并新状态和旧状态。
返回状态类似于构造函数中类组件的定义,返回状态更新函数类似于类组件
如果需要使用以前的状态来计算新状态,则可以传递该功能。此功能将接收先前的状态并返回更新的值
如果需要通过复杂的计算获得初始状态,则可以传递函数并计算并返回函数中的初始状态。仅在初始渲染时才调用此功能
当调用状态钩的更新功能时,React将在两次之前和之后进行两次比较两个状态。如果结果为真,React将跳过子组件的渲染和效果的执行
更改函数组件主题中的DOM(REACT渲染阶段),添加订阅,设置计时器,记录日志并执行其他不允许的副作用,因为这可能会产生不明显的错误并破坏UI的一致性
挂钩的使用用于完成此类副作用。接种一个包含命令并可能具有副作用代码的函数
浏览器完成布局和绘制后,将在下一次渲染之前执行该函数,以确保浏览器不会阻止屏幕的屏幕更新
挂钩函数执行时间与类组件和生命周期相似。区别在于,传递给浏览器的函数将在浏览器完成并绘制后执行异步执行
在正常情况下,卸载组件时需要去除效果的副作用。钩函数可以返回清除功能。在卸载组件之前,将执行清晰的功能。组件将执行该函数以在执行下一个效果之前清除先前的效果。
去除函数的执行时间与类组件的生命周期相似。如果使用此功能,则可以将组件中互连的部分分为较小的功能,以防止忘记不必要的内存泄漏泄漏。
默认情况下,每个组件渲染后都会执行效果。:
上下文提供了可以在组件树之间传输的方法,而无需手动向每个层组件添加道具。它用于订阅功能组件中的上层上下文上下文更改。
接收上下文对象(返回值)并返回上下文的当前值。
等效于类组件或
它不会改变消耗上下文的方式。它只为我们提供了一种额外的,更美丽,更美丽的消耗上下文的方式。将其应用于使用多个上下文的组件时,它将非常有用
当上下文值更改时,称为调用的呼叫将被重新汇总。为了减少重新施用组件的大开销,可以通过使用记忆进行优化
假设出于某种原因,您有属性,而您只想重新授予其中一些
在某些情况下,替换方案更适合于复杂的逻辑和包含多个子值,或者下一个状态取决于上一个状态。
使用还可以优化那些会触发深层更新的组件的性能,因为父组件可以传递到自我组件而不是回调功能
有两种初始化UserDucer的方法
它用于返回变量ref对象,其属性被初始化为传递参数()
创建的REF对象是一个普通的JavaScript对象,与自行构建的对象相比,唯一的区别是,每次渲染时将其返回相同的ref对象
使用创建的REF对象可以用作访问DOM的方式,REF对象以形式传递到组件中。创建组件后,REF对象的属性将设置为相应的DOM节点。
创建的REF对象可用于同时绑定任何变量值,并通过手动将相应值设置为对象的属性
组合方法的使用是一种常见的性能优化方法,它可以避免由于父部件状态的变化而避免不必要的子汇率
它用于创建回扣功能。仅当某个因项目更改时,调整功能才会更新。您可以将回调函数传递到优化并使用参考,以避免渲染不需要的子组件。在PropSwhen中,属性是相同的,React将跳过渲染组件的操作,并直接重复使用最近渲染的结果
等效,以下结果可以替换为以下结果:
“创建”函数和依赖项项目数组是作为参数引入的,当某个依赖关系更改时,它只会重新计算记忆的值。此优化有助于避免每次渲染时计算高间接费用
注意:
您可以在使用时自定义暴露于父组件的示例。在大多数情况下,应避免使用涉及REF。
同样,与浏览器布局和绘画完成后的异步执行效果不同,它将在布局布局后同步浏览器中的效果,绘画
执行时间如下:下面:
通过自定义钩,可以将组件逻辑提取到可重复使用的功能中。在挂钩功能之前,有两种流行的反应方式可以共享组件之间的状态逻辑:渲染道具和高端组件,但是这种类型的解决方案将导致诸如组件树的层次冗余等问题。自定义挂钩的使用。可以很好地解决此类问题
自定义钩是一个以“”开头的函数,可以在功能内部调用其他钩子。以下是实时的自定义钩子实现:
自定义挂钩的自定义规则基本上与挂钩使用规则相同。以下是自定义钩的过程:
每次使用自定义钩子时,React都会执行此功能以获得独立状态并执行独立的副作用功能。所有状态和副作用都是完全隔离的
React Hooks官方文件
REACT USECALLBACK和USEMEMO的详细说明
防止react.memo和usecontext钩
MutationObserver MDN
USELAYOUTEFFECT和使用效率之间的区别