【前端知识】React 基础巩固(十八)——组件化开发(二)

React 基础巩固(十八)——组件化开发(二)

生命周期

  • 生命周期是一个抽象的概念,在生命周期的整个过程中,分成了很多个阶段

    • 比如装载阶段(Mount),组件第一次在 DOM 树中被渲染的过程
    • 比如更新过程(Update),组件状态发生变化,重新更新渲染的过程
    • 比如卸载过程(Unmount),组件从 DOM 树中被移除的过程
  • React 内部为了告诉我们当前处于什么阶段,对我们组件内部实现的某些函数进行回调,这些函数就是生命周期函数

    • 比如实现 componentDidMount 函数:组件已经挂载到 DOM 上时,就会回调;
    • 比如实现 componentDidUpdate 函数:组件已经发生了更新时,就会回调;
    • 比如实现 componentWillUnmount 函数:组件即将被移除时,就会回调;
  • React 生命周期主要指类的生命周期,函数式组件是没有生命周期函数的(可通过 hooks 模拟生命周期回调)

  • 生命周期解析
    React生命周期

  • 生命周期函数

    • componentDidMount
      • componentDidMount()会在组件挂载后(插入 DOM 树中)立即调用
      • 通常,依赖于 DOM 的操作、发送网络请求(官方建议)、添加订阅等操作可以在这里进行
    • componentDidUpdate
      • componentDidMount()会在更新后被立即调用,首次渲染不会执行此方法
      • 当组件更新后,可以在此处对 DOM 进行操作
      • 若对更新前后的 props 进行了比较,也可以选择在此处进行网络请求
    • componentWillUnmount
      • componentWillUnmount()会在组件卸载及销毁之前直接调用
      • 在此方法中执行必要的清理操作(清除 timer、取消网络请求、清除订阅等)
    • shouldComponentUpdate
      • 用于判定是否更新组件
    • getDerivedStateFromProps
      • state 的值在任何时候都依赖于 props 时使用;
      • 该方法返回一个对象来更新 state
    • getSnapshotBeforeUpdate
      • 在 React 更新 DOM 之前回调的一个函数,可以获取 DOM 更新前的一些信息(比如说滚动位置)

组件嵌套

  • 对组件进行拆分,拆分成一个个小的组件
  • 将这些组件嵌套在一起,最终形成应用

组件通信

  • 父组件通过 属性 = 值 的形式传递数据给子组件
  • 子组件通过 props 参数获取父组件传递过来的数据

父传子(Main -> MainBanner)

  • Main.jsx
import React, { Component } from "react";
import MainBanner from "./MainBanner";
import MainProductList from "./MainProductList";export class Main extends Component {constructor() {super();this.state = {banners: ["test1", "test2", "test3"],productList: ["pro1", "pro2", "pro3"],};}render() {const { banners, productList } = this.state;return (<div className="main"><div>main</div><MainBanner banners={banners} /><MainProductList productList={productList} /></div>);}
}export default Main;
  • MainBanner.jsx
import React, { Component } from "react";export class MainBanner extends Component {// 默认值新写法// static defaultProps = {//   banners: ['default'],// }render() {const { banners } = this.props;return (<div><ul>{banners.map((item) => {return <li key={item}>{item}</li>;})}</ul></div>);}
}// 类型验证
MainBanner.protoTypes = {banners: PropTypes.array.isRequired,title: PropTypes.string,
};// 默认值
MainBanner.defaultProps = {banners: ["default"],
};export default MainBanner;

子传父(AddCounter -> Main)

  • AddCounter.jsx
import React, { Component } from "react";export class AddCounter extends Component {addCount(num) {console.log(num);this.props.addClick(num);}render() {return (<div><button onClick={(e) => this.addCount(1)}>+1</button><button onClick={(e) => this.addCount(5)}>+5</button><button onClick={(e) => this.addCount(10)}>+10</button></div>);}
}export default AddCounter;
  • Main.jsx
import React, { Component } from "react";
import AddCounter from "./AddCounter";
import SubCounter from "./SubCounter";
export class Main extends Component {constructor() {super();this.state = { counter: 100 };}changeCounter(count) {this.setState({ counter: this.state.counter + count });}render() {const { counter } = this.state;return (<div className="main"><div>当前计数:{counter}</div><AddCounteraddClick={(count) => {this.changeCounter(count);}}/><SubCountersubClick={(count) => {this.changeCounter(count);}}/></div>);}
}
export default Main;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/15537.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python】逻辑中断(and or)

今天学习javascript的时候竟然有一个额外收获&#xff1a;逻辑中断。而且我实验了一下&#xff0c;逻辑中断同样适用于python。 0 and 2返回&#xff1a; 0 1 and 2返回&#xff1a; 2 0 and 2返回的是0&#xff0c;而1 and 2返回的是2。就是因为在0那里出现了逻辑中断。 解…

大模型的数据瓶颈应该如何破除?看完这篇文章你就懂了

随着机器学习和深度学习技术的不断发展&#xff0c;大模型已经成为了现代人工智能研究和应用中的重要组成部分。然而&#xff0c;对于大模型而言&#xff0c;数据瓶颈问题仍然是一个亟待解决的挑战。尤其是在数据存量和质量方面&#xff0c;我们需要更加注重其影响&#xff0c;…

【Gradle】Gradle的概述与简单使用

一、概述 1.什么是Gradle&#xff1f; Gradle 是一种构建工具。 Java世界中主要有三大构建工具&#xff1a;Ant、Maven和Gradle。Ant几乎销声匿迹了&#xff0c;常见的就只有Maven和Gradle。 目前市面上Java开发&#xff0c;使用的构建工具基本都是Maven&#xff1b;安卓开…

C语言程序设计——数据在内存中的存储

一、数据类型介绍 1.基本内置类型 char // 字符数据类型 1 B short // 短整型 2 B int // 整型 4 B long // 长整型 4 or 8 B long long //更长的整型 8 B float //单精度浮点型 4 B double //双精…

解决Unity的PostProcess奇怪报错

大家好&#xff0c;我是阿赵。   最近在使用Unity的PostProcess后处理效果的时候&#xff0c;发现了一个问题&#xff0c;下面记录一下这个问题的出现原因和解决办法。 一、出现问题 问题是这样出现的&#xff1a;   在场景里面添加某一个后处理效果后&#xff0c;当这个后…

C# PaddleInference OCR文字识别(只识别)

说明 C# PaddleInference OCR文字识别&#xff08;只识别&#xff09;&#xff0c;没有文字区域检测、文字方向判断 测试图片是文字区域检测裁剪出来、处理过的图片 完整的OCR识别查看 C# PaddleInference OCR识别 学习研究Demo_天天代码码天天的博客-CSDN博客 效果 项目 …

idea集成maven-mvnd

maven-mvnd是什么&#xff1f; 参考文档&#xff1a; Maven加强版 — mvnd的使用测试 - 知乎https://blog.csdn.net/cr898839618/article/details/122319874 1.下载mvnd安装包 Releases apache/maven-mvnd GitHub 2.修改配置文件&#xff1a;安装包中的conf目录下的mvnd.…

C++之函数模板高级用法(一百五十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

rabbitmq使用springboot实现direct模式

一、 Direct模式 类型&#xff1a;direct特点&#xff1a;Direct模式是fanout模式上的一种叠加&#xff0c;增加了路由RoutingKey的模式。 二、coding Ⅰ 生产者 1、引入相应的pom文件 pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

四十三、贪心——Huffman树、排序不等式

算法主要内容 一、Huffman树1、题目内容——合并果子2、算法思路&#xff08;1&#xff09;“合并果子”中的Huffman树&#xff08;2&#xff09;算法步骤&#xff08;3&#xff09;状态转移 3、题解 二、排序不等式1、题目内容——排队打水2、算法思路&#xff08;1&#xff0…

科研论文中SCI,SSCI ,CSSCI是什么

目录 1 SCI 2 SSCI 3 CSSCI 什么是SCI&#xff0c;SSCI &#xff0c;CSSCI 目前&#xff0c;在国际科学界&#xff0c;如何正确评价基础科学研究成果已引起越来越广泛的关注。而被SCI、SSCI收录的科技论文的多寡则被看作衡量一个国家的基础科学研究水平、科技实力和科技论文水平…

STM32——关于时钟源的实际使用及解释

1、STM32内部有5个时钟源&#xff0c;分别为HSI、HSE、LSE、LSI、PLL。 HSE&#xff1a;高速外部时钟&#xff0c;可接石英谐振器、陶瓷谐振器&#xff0c;或者接外部时钟源&#xff0c;其频率范围为4MHZ~16MHZ。 LSE&#xff1a; 低速外部时钟&#xff0c;接频率为32.768KHZ…