React学习笔记(二)组件详解

news2024/11/17 14:53:06

一、组件的概念:

        当你开始学习 React 的时候,你会了解到 React 组件是 React 应用程序的基本构建块。组件是一个隔离的、可重复使用的代码块,由 HTML 元素、其他组件或自定义的 UI 元素组成,组件也就是react的核心思想,如何封装和抽象组件至关重要

二、组件的分类:

1.函数组件是以函数的形式定义的组件,没有状态或生命周期方法。例如:

function MyComponent(props) {
  return <h1>Hello, {props.name}!</h1>;
}

在上面的代码中,我们定义了一个函数组件 MyComponent,它会接收一个 props 参数(一个包含组件属性的对象),并渲染一个包含 props.name 值的标题元素。

2.类组件是以 ES6 class 的形式定义的组件,例如:

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}

上述两个组件在 React 里是等效的。

三、如何使用自定义的组件?

以刚刚我们定义的函数式组件MyComponent为例:

const element = <MyComponent name="Sara" />;

当 React 元素为用户自定义组件时,它会将 JSX 所接收的属性(attributes)以及子组件(children)转换为单个对象传递给组件,这个对象被称之为 “props”。

例如,这段代码会在页面上渲染 “Hello, Sara”:

完整代码:

function MyComponent(props) {
  return <h1>Hello, {props.name}</h1>;
}

const element = <MyComponent name="Sara" />;
ReactDOM.render(
  element,
  document.getElementById('root')
);

该段代码执行时发生了以下四步

  1. 我们调用 ReactDOM.render() 函数,并传入 <MyComponent name="Sara" /> 作为参数。
  2. React 调用 MyComponent 组件,并将 {name: 'Sara'} 作为 props 传入。
  3. MyComponent 组件将 <h1>Hello, Sara</h1> 元素作为返回值。
  4. React DOM 将 DOM 高效地更新为 <h1>Hello, Sara</h1>

注意: 组件名称必须以大写字母开头。

四、组合组件:

react中组件可以自由组合使用

例如:

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

function Common(props) {
  return <h1>Common, {props.name}</h1>;
}

function App() {
  return (
    <div>
      <Welcome name="Sara" />
      <Common name="Cahal" />
      <Welcome name="Edite" />
    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

 该段代码使用了两次welcome组件和一次Common组件,当然组件中也是可以再使用其他组件的,形成一颗组件树,例如以下每个圈都是一个组件

五、组件的Props

从刚刚组件的使用中我们可以看出组件的props是一种用于父组件向子组件传递数据的机制。props是一个JavaScript对象,包含了组件的属性信息,可以包括任意类型的数据(例如字符串、数字、布尔值、数组、对象等)。

在组件中,可以通过在组件标签中添加属性来传递数据给子组件

但是注意组件无论是使用函数声明还是通过 class 声明,都决不能修改自身的 props

例如如果我们强行修改props

this.props.likedText = '取消'

这时控制台就会报错

 那么我们如何让React 组件随用户操作、网络响应或者其他变化而动态更改输出内容呢,这时我们就要引入组件的一个新的概念,称之为 “state”

六、组件的state

        在 React 中,组件的 state 是用于描述组件内部状态的一种机制。state 是一个 JavaScript 对象,包含了组件的内部数据(例如用户输入、计算结果等)。

        当 state 发生变化时,React 会自动重新渲染组件,并更新组件的显示内容。因此,使用 state 可以实现动态的、交互式的 UI。

        在 React 中,有两种类型的组件:函数组件和类组件。对于函数组件,由于它不具有状态或生命周期方法,因此无法使用 state。而对于类组件,可以通过定义一个 state 对象来管理组件的内部状态。例如:

class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = { count: 0 };
  }

  render() {
    return (
      <div>
        <h1>Count: {this.state.count}</h1>
        <button onClick={() => this.setState({ count: this.state.count + 1 })}>
          Increment
        </button>
      </div>
    );
  }
}

 在上面的代码中,我们定义了一个类组件 Counter,它使用一个 state 对象来管理组件的内部状态。在组件的构造函数中,我们初始化了一个名为 count 的状态变量,其初始值为 0。在组件的 render 方法中,我们使用 this.state.count 来访问 count 状态变量,并使用 setState 方法来更新 count 值。当用户点击 Increment 按钮时,React 会自动调用 setState 方法,并更新组件的显示内容。

如何正确地使用 State:

1.不要直接修改 State

// Wrong
this.state.comment = 'Hello';

// Correct
this.setState({comment: 'Hello'});

2.State 的更新可能是异步的,出于性能考虑,React 可能会把多个 setState() 调用合并成一个调用。因为 this.props 和 this.state 可能会异步更新,所以你不要依赖他们的值来更新下一个状态。

// Wrong
this.setState({
  counter: this.state.counter + this.props.increment,
});
// Correct
this.setState((state, props) => ({
  counter: state.counter + props.increment
}));

3.State 的更新会被合并,当你的 state 包含几个独立的变量你可以分别调用 setState() 来单独地更新它们

七、将函数组件转换成 class 组件

通过以下五步将 Clock 的函数组件转成 class 组件:

1.创建一个同名的 ES6 class,并且继承于 React.Component。
2.添加一个空的 render() 方法。
3.将函数体移动到 render() 方法之中。
4.在 render() 方法中使用 this.props 替换 props。
5.删除剩余的空函数声明。
 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Visual Studio Code 插件安装

目录 1、在线安装 1.1 单个插件的安装 1.2 根据配置文件一次性安装多个插件 1.3 同步配置的方式 1.3.1 第一种方式使用VSCode自带的同步功能。 1.3.2 第二种方式&#xff0c;首先需要先安装插件 Settings Sync 2、离线安装 2.1 去官方下载离线安装包进行安装 2.2 直接…

DolphinScheduler任务调度工具

任务调度&#xff1a;系统为了自动完成特定任务&#xff0c;在约定的特定时刻去执行任务的过程 分布式调度&#xff1a; 分布性&#xff1a;每个部分可以独立部署&#xff0c;服务之间通过网络通信伸缩性&#xff1a;每个部分可以集群部署&#xff0c;动态伸缩扩容高可用 jd…

IntelliJ IDEA 2022.3.1 (Community Edition)代码注释风格设置

Setting -> Editor -> Code Style -> Java -> Comment Code

Unity 之 最新Ads原生广告接入流程详解和工具类分享

Unity 之 Ads接入流程详解 一&#xff0c;注册 Unity Ads 广告 SDK二&#xff0c;下载 Unity Ads 广告 SDK三&#xff0c;配置 Unity Ads 广告 SDK3.1 广告位展示流程3.2 代码初始化 四&#xff0c;集成 Unity Ads 广告 SDK4.1 相关介绍4.2 代码分享 五&#xff0c;测试 Unity …

C语言变量学习2

前文已经学习了C语言变量&#xff1b; C语言变量_c语言变量块_bcbobo21cn的博客-CSDN博客 继续再学习&#xff1b;VC6新建一个单文档工程&#xff1b; void CVtestView::OnDraw(CDC* pDC) {CVtestDoc* pDoc GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for na…

【C语言复习】第三篇、Gitee码云的创建和使用

目录 第一部分、Gitee码云的用处 1、为什么要使用Gitee&#xff1f; 2、我参考的视频 第二部分、软件安装流程 1、下载Git for windows软件和TortoiseGit软件 2、Git for windows软件的安装流程 3、TortoiseGit软件软件的安装流程 第三部分、Gitee如何创建仓库&#xf…

jquery和jquery ui有什么区别

jquery和jquery ui有什么区别 jquery和jquery ui有什么区别 jQuery UI 与 jquery 的主要区别是&#xff1a;(1) jQuery是一个js库&#xff0c;主要提供的功能是选择器&#xff0c;属性修改和事件绑定等等。(2) jQuery UI则是在jQuery的基础上&#xff0c;利用jQuery的扩展性&…

企业搭建小型直播间、中型直播间、大型直播间的介绍

常用的直播间搭建大致分为实景和绿幕两种类型。实景区即公司具体场景&#xff0c;如会客厅、LOGO墙、海报展板以及纯白背景等&#xff0c;根据企业直播主题而调整&#xff1b;绿幕区则是通过搭建绿幕&#xff0c;满足企业直播过程中需要进行抠像&#xff0c;设置沉浸式背景的需…

国产麒麟服务器等保二级 配置规范(一)

麒麟linux的加固 1.检查设备密码复杂度策略 配置文件 vi /etc/pam.d/system-auth password requisite pam_cracklib.so ucredit-1 lcredit-1 dcredit-1 minlen6 auth required pam_tally.so deny5 unlock_time600 no_lock_time account required pam_tally.sopassword suffi…

大数据Doris(四十五):Routine Load注意事项

文章目录 Routine Load注意事项 Routine Load注意事项 1、查看作业状态的具体命令和示例可以通过 HELP SHOW ROUTINE LOAD; 命令查看。 2、用户可以通过 STOP/PAUSE/RESUME 三个命令来控制作业的停止,暂停和重启。可以通过 HELP STOP ROUTINE LOAD; HELP PAUSE ROUTINE LOA…

调用万维易源API实现证件照换装

目录 1. 作者介绍2. 万维易源API简介2.1 易源数据2.2 易源API管理2.3 调用参数简介 3. 万维易源API调用过程3.1 获取ID和代码3.2 代码实现3.3 完整代码 参考&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 吴宇&#xff0c;男&#xff0c;西安工程大学电子信息…

LVS keepalived 集群

LVS keepalived 集群 LVS keepalived 集群一、Keepalived及其工作原理1.Keepalived体系主要模块及其作用2.健康检查的方式&#xff08;探针&#xff09; 二、LVSKeepalived 高可用群集部署1.LVS部署一&#xff1a;配置负载调度器&#xff08;主、备相同&#xff09;二&#xff…

FreeRTOS实时操作系统(二)任务创建与任务删除(HAL库)

文章目录 前言系统配置任务创建动态任务创建删除实践静态任务创建删除实践 前言 接着学习正点原子的FreeRTOS教程&#xff0c;涉及到一些详细的系统内文件代码 系统配置 可以通过各种的宏定义来实现我们自己的RTOS配置&#xff08;在FreeRTOSconfig.h&#xff09; “INCLUDE…

100天精通Python(可视化篇)——第92天:Pyecharts绘制炫酷柱状图、条形图实战大全

文章目录 专栏导读1. 基础柱状图2. 旋转x轴标签3. 旋转坐标轴4. 添加坐标轴名称5. 添加标记点6. 添加标注线7. 添加数据8. 添加自定义背景图9. 堆叠柱状图10. 柱状图与折线图组合11. 三维柱状图12. 水平滑动、鼠标滚轮缩放柱状图 专栏导读 &#x1f525;&#x1f525;本文已收…

ConcurrentHashMap源码

HashTable是一个线程安全的类&#xff0c;它使用synchronized来锁住整张Hash表来实现线程安全&#xff0c;即每次锁住整张表让线程独占&#xff0c;相当于所有线程进行读写时都去竞争一把锁&#xff0c;导致效率非常低下。 介绍 ConcurrentHashMap的底层原理和HashMap是比较相…

网页之http

目录 一、网页概念&#xff1a; 1.纯文本格式文件 2.编写语言-----html---超文本标记语言 3.浏览器相当于翻译器&#xff0c;检查是否为html文件&#xff0c;是的话就翻译&#xff0c;否则就报错。 二、域名 三、DNS解析 1.分布式域名解析-----层次性&#xff1a;迭代处…

谁是远程界的天花板?2023年5款最常用的远程软件横测:ToDesk、向日葵、TeamViewer、Splashtop、AnyDesk

前言 一个优秀的远控软件&#xff0c;追求的是可信赖的安全感&#xff0c;连接的流畅度、画质的清晰度、操作的简单化、毫秒级的无感延迟以及全方位的功能。另外&#xff0c;远控软件还应拥有独立的创新技术&#xff0c;具备竞争对手无法超越的市场前瞻性&#xff0c;与世界保…

MySQL - 第4节 - MySQL表的约束

1.MySQL表的约束概述 • 真正约束字段的是数据类型&#xff0c;如果插入的数据超出了对应数据类型的取值范围&#xff0c;那么数据将会插入失败。 • 但是数据类型的约束很单一&#xff0c;为了更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性&#xff0c;M…

ldr、str、ldm、stm、msr、mrs、swi、svc、mrc等ARM指令详解及具体应用

文章目录 前言一、跳转指令1.1 相对跳转1.2 绝对跳转 二、内存操作指令2.1 Load和Store2.1.1 伪指令2.1.2 伪操作 2.2 内存操作指令具体应用 三、 寄存器的寻址方式3.1 前索引寻址3.2 后索引寻址3.3 基址变址 四、块拷贝指令&#xff08;多数据加载&#xff09;4.1 块拷贝4.2 指…

Nacos 源码分析全系列

Nacos 源码分析全系列 学习目标 主线任务 代码解析画图git库(中文注释)设计思想多版本迭代讨论群(私聊进群) 主要的大纲路线 主要拆解的是nacos的1.4.1版本和2.1.0版本,还有nacos 的一些已知的bug 正确的学习源码的姿势 服务端是如何处理客户度的请求 注册中心服务 内存…