函数组件和类成分之间的差异是根据不讨论React钩子和组分生命周期的基础引入的。Hooks是在React 16.8上正式发布的函数,并且对类成分没有影响。
班级组件的功能是强大的,可以具有自己的状态,有一个生命周期,并且开发人员可以根据他们的需求在特定的生命周期中执行他们想要的操作,例如发送AJAX请求。尽管功能组件功能很强,它有以下问题:
挂钩释放后,功能组件可以具有自己的状态,并且还可以感知分组器被破坏并将DOM绘制到屏幕上的时间,但是component类型中没有三个问题。提供了许多内置的钩子,在本文中介绍了Usestate和使用效果。
这是与状态管理有关的钩子。它允许功能组件具有状态。它是最常用的钩子之一。类型定义如下:
从类型的定义来看,可以看出,美国具有两个重载,它们是参数和非通道参数。不管是否传递了参数,USESTATE都会返回一个长度为2。数组的第一个位置是状态。第二个位置是用于更新状态的函数。为了方便语言,此函数将功能记录为setState.next,介绍了usestate的基本用法。
目前,用户的参数用作状态的初始值。如果没有参数,则状态的初始值不确定。使用如下:
Usestatewithoutfunc组件有两个状态:名称和年龄。名称只能是字符串类型。初始值是“ he yu”。年龄的数据类型是数字或未定义的。初始值是未定义的。
目前,函数的返回值是状态的初始值。在某个点,必须通过计算获得状态的初始值。目前,建议将函数用作用户的参数。使用如下:
美国的参数是函数,计数的初始值是函数的返回值,数据类型为编号。
在上述代码中扩展setCount有两种方法。用法如下:
如果setCount的参数是函数,则计数的当前值将以参数的形式传递给函数,并且该函数的返回值用于更新状态。如果SetCount的参数不是函数,而是参数用于更新状态。修改状态只能用于使用与之相关的setState,并且必须符合不变性的原理。状态价值的更改将导致组件重新申请人。
目前,已经引入了USESTATE的基本用法,观察下面更复杂的代码,并分析浏览器打印的结果。
如果您了解React函数组件中引入的知识,那么它可以轻松地分析浏览器打印的值为0而不是1.其他重点,那么此渲染的所有值都是在函数组件中获得的。在此渲染范围内,道具和状态始终保持不变。计数的值在下一个渲染中为1,但是Console.Log(count)在此渲染过程中打印了计数的值,因此结果为0。
使用效果是另一个常用的挂钩,除了USESTATE。它比Usestate更难理解,但是只要您了解该功能组件每次都有自己的状态和道具,它将变得易于理解使用效果。使用使用效率可以让开发人员知道何时将DOM绘制到屏幕和屏幕和当组件被破坏时。一些开发人员认为,这是组件componentdidmount,componentDidupdate和componentWillunMount的组合。类似生命周期概念。useeFect类型的定义如下:
从类型的定义可以看出,最多可以接受两个参数。第一个参数是函数,它可以具有返回值。之后,该函数称为效果;,称为deps.deps.deps来确定是否在此渲染中执行效果。如果执行,则可以在将浏览器绘制到屏幕上后执行。您可以将AJAX请求,访问DOM和其他操作放置,并且不会阻止浏览器绘图。可以多次使用该功能组件来定义效果。这些效果的执行顺序与其定义的顺序一致。建议在不同效果中以不同的责任代码。下一个从效果清理工作及其依赖项的两个方面介绍了Userftect。
效果不会清理,这意味着它没有回报值。代码如下:
上面的代码定义了效果,即设置文档的值。标题设置成本。
效果的清洁工作是指效果返回的功能。在重新启动组件并卸载组件后,调用此功能。以下代码定义了清洁工作的效果。
将上述效果绘制到接口之后,点击事件已绑定到身体元素。重新施用组件后,点击事件的最后效果绑定是未结合的。该效果将在组件渲染的首次执行和每个续订之后执行。如果组件的状态经常更新,则组件重新施用也将很频繁,这会导致身体经常绑定点击事件。有一种方法可以使组件仅在第一个渲染时绑定身体事件?当然?。
前两个示例中定义的效果并不表示依赖项,因此每一轮组件都会执行它们。以下代码允许组件仅在第一个渲染时仅在第一个渲染时绑定事件,该代码如下:
USEREFECT的第二个参数不取决于效果。该效果仅在组件的初始渲染期间执行,并且在卸载组件时执行其清理工作。这是绑定DOM事件的一件好事。它可以防止事件在事件中反复绑定和解开,但问题是,如果您访问事件处理程序中组件的状态和道具,则只能获得其初始值。无法获得最新值。
为了将依赖项项目实现,React将比较此渲染项期间依赖项的值与先前渲染的值。如果结论是其中一个已更改,则将执行效果,否则将不会执行。效果应放置在useeffect的第二个参数中。代码显示如下:
上述效果将在组件的初始渲染下执行。发生更改时,还将执行组件续订。相应地,当组件被卸载并通过名称更改渲染组件时,将清理先前的效果。
提示:每次渲染函数组件时,每个效果都是不同的函数。功能组件中的每个位置(包括事件处理功能,效果,计时器等)只能获取定义其渲染时间状态的道具。
功能组件生命周期中挂钩的呼叫顺序如下所示
原始:https://juejin.cn/post/7098297316074848263