ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用基于函数的组件详细 ReactJS 生命周期,并提供简单和复杂的示例来说明每个阶段。

2023-07-16 15:26:33  阅读:150  来源: 互联网

标签:React 函数


React 是一个流行的 JavaScript 库,用于构建用户界面。React 的一个关键方面是它的生命周期,它指的是在组件的整个生命周期中发生的事件序列。React 生命周期方法允许您控制组件的行为,并在组件存在期间的特定点执行操作。

基于函数的组件中的 React 生命周期:

组件的生命周期有三个主要阶段:装载阶段、更新阶段和卸载阶段。

挂载阶段从首次创建组件并将其插入 DOM 时开始。当组件的状态或道具发生变化时,就会发生更新阶段。卸载阶段发生在从 DOM 中移除组件时。

在基于函数的组件中,生命周期方法是使用 React 钩子实现的,例如 和 .这些钩子提供了一种管理组件状态和执行副作用的方法。useEffectuseState

1. 安装阶段 :

挂载阶段是指创建组件并将其插入 DOM 的时间段。

在此阶段,React 会调用几种生命周期方法,使开发人员能够配置组件、设置任何必要的状态或事件侦听器以及执行其他初始化任务。

  • useState:用于初始化和管理组件中的状态。
  • useEffect使用空的依赖数组 ():类似于 ,它在初始渲染后运行。您可以在此处执行获取数据、订阅事件或设置计时器等任务。[]componentDidMount

2. 更新阶段:

当组件的 props 或状态发生更改并且需要在 DOM 中更新组件时,就会发生此阶段。

  • useState:用于更新和管理组件中的状态。
  • useEffect使用依赖项数组:与 类似,它在指定的依赖项更改时运行。在这里,您可以处理状态或 props 的更新、执行计算或触发副作用。componentDidUpdate

3. 卸载阶段:

卸载阶段是指从 DOM(文档对象模型)中删除组件并且不再呈现或访问的生命周期阶段。

在此阶段,React 执行一系列清理操作,以确保组件及其关联的资源得到正确处置。

卸载阶段是 React 组件生命周期的最后阶段,发生在从 DOM 树中删除组件时。

发生这种情况的原因多种多样,例如,当不再需要组件时,重新呈现父组件而不包括子组件时,或者当应用程序导航到其他页面或视图时。

  • useEffect清理功能:与 类似,它在卸载组件之前运行。您可以在此处执行清理操作,例如删除事件侦听器或取消异步任务。componentWillUnmount

通过利用这些钩子,您可以在基于函数的组件中模拟传统生命周期方法的行为。挂钩有助于管理状态,而挂钩允许您控制副作用并执行清理操作。useStateuseEffect

需要注意的是,在基于函数的组件中,React 生命周期方法并不是严格意义上的一对一等价物。相反,钩子在管理组件行为和状态方面提供了更大的灵活性和简单性。

了解 React 生命周期及其相应的钩子对于有效地构建 React 应用程序至关重要。它允许您控制组件行为、处理状态更改、执行副作用并确保正确清理。

让我们通过详细的代码示例来了解:--

1. 挂载阶段:
此阶段发生在创建组件并将其插入 DOM 时。

简单的例子:

   import React from 'react';

   function SimpleMountingExample() {
     console.log('Component mounted');

     return (
       <div>
         <h1>Simple Mounting Example</h1>
         <p>Hello, World!</p>
       </div>
     );
   }

说明:
在这个简单的示例中,组件在最初呈现时被装载。执行组件主体中的语句,记录“组件已挂载”。JSX 被呈现,并返回生成的 React 元素。
console.log

复杂示例:

   import React, { useState, useEffect } from 'react';

   function ComplexMountingExample() {
     const [data, setData] = useState(null);

     useEffect(() => {
       console.log('Component mounted');

       fetchData();

       return () => {
         console.log('Component unmounted');
       };
     }, []);

     const fetchData = async () => {
       const response = await fetch('https://api.example.com/data');
       const jsonData = await response.json();
       setData(jsonData);
     };

     return (
       <div>
         <h1>Complex Mounting Example</h1>
         {data ? (
           <ul>
             {data.map((item) => (
               <li key={item.id}>{item.name}</li>
             ))}
           </ul>
         ) : (
           <p>Loading data...</p>
         )}
       </div>
     );
   }

说明:
在此复杂示例中,组件在最初呈现时被装载。钩子与空依赖项数组一起使用,以模拟生命周期方法。它执行回调函数,该函数记录“组件挂载”并从 API 获取数据。其中的清理功能将在组件卸载时执行,记录“组件已卸载”。
useEffectcomponentDidMountuseEffect

2. 更新阶段:
当组件的状态或 props 更新时,会出现此阶段,从而导致重新渲染。

简单的例子:

   import React, { useState } from 'react';

   function SimpleUpdatingExample() {
     const [count, setCount] = useState(0);

     const handleClick = () => {
       setCount(count + 1);
     };

     return (
       <div>
         <h1>Simple Updating Example</h1>
         <p>Count: {count}</p>
         <button onClick={handleClick}>Increment</button>
       </div>
     );
   }

说明:
在这个简单的示例中,使用钩子定义了一个状态变量。单击按钮时,函数会通过递增状态来更新状态。这将触发组件的重新渲染,更新显示的计数。
countuseStatehandleClickcount

复杂示例:

   import React, { useState, useEffect } from 'react';

   function ComplexUpdatingExample() {
     const [data, setData] = useState([]);

     useEffect(() => {
       fetchData();
     }, []);

     const fetchData = async () => {
       const response = await fetch('https://api.example.com/data');
       const jsonData = await response.json();
       setData(jsonData);
     };

     return (
       <div>
         <h1>Complex Updating Example</h1>
         <ul>
           {data.map((item) => (
             <li key={item.id}>{item.name}</li>
           ))}
         </ul>
       </div>
     );
   }

说明:
在这个复杂的示例中,组件使用带有空依赖项数组的钩子从 API 获取数据,模拟生命周期方法。获取的数据存储在状态变量中。更新状态时,它会触发组件的重新呈现,从而导致提取的数据被映射并显示在列表中。
useEffectcomponentDidMountdata

3. 卸载阶段:
此阶段发生在从 DOM 中卸下组件时。

简单的例子:

   import React, { useEffect } from 'react';

   function SimpleUnmountingExample() {
     useEffect(() => {
       return () => {
         console.log('Component unmounted');
       };
     }, []);

     return (
       <div>
         <h1>Simple Unmounting Example</h1>
         <p>Component Content</p>
       </div>
     );
   }

说明:
在这个简单的示例中,钩子与空依赖项数组一起使用,以模拟生命周期方法。它返回一个清理函数,该函数将在组件即将卸载时执行。在这种情况下,清理功能会记录“组件已卸载”。
useEffectcomponentWillUnmount

复杂示例:

   import React, { useEffect } from 'react';

   function ComplexUnmountingExample() {
     useEffect(() => {
       const timer = setInterval(() => {
         console.log('Interval running...');
       }, 1000);

       return () => {
         clearInterval(timer);
         console.log('Interval cleared');
       };
     }, []);

     return (
       <div>
         <h1>Complex Unmounting Example</h1>
         <p>Component Content</p>
       </div>
     );
   }

说明:
在这个复杂的示例中,挂钩设置了一个间隔计时器,用于记录“间隔运行...”每一秒。返回的清理函数在即将卸载组件时清除间隔,记录“间隔已清除”。
useEffectuseEffect

通过检查这些示例,您可以看到 ReactJS 中基于函数的组件如何经历挂载、更新和卸载阶段。生命周期挂钩 () 和状态管理挂钩 () 允许您控制行为并在组件生命周期的不同阶段执行操作

标签:React,函数
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有