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

news2024/9/21 19:35:15

一、组件的概念:

        当你开始学习 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/659536.html

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

相关文章

python Flask web项目uwsgi + nginx部署

1.安装python 略 2.虚拟环境 2.1安装vertualenv pip3 install virtualenv2.2创建虚拟环境 创建保存环境的目录&#xff1a; mkdir venvs创建虚拟环境&#xff1a; [rootroot /]# virtualenv /home/xxx/venvs/flask2 --pythonpython3查看虚拟环境&#xff1a; [rootroot…

破万亿!英伟达的市值

文章目录 破万亿 &#x1f928; 英伟达的市值&#x1f928; 英伟达市值几近破万亿&#x1f916; ChatGPT 伪造 6 个法律案例&#x1f5e1;️ AI 巨头的呼吁&#xff0c;是真担心还是想垄断&#xff1f;&#x1f3e0; 硅谷诈骗犯开启女性监狱新家&#x1f4c8; 美国房价春季反弹…

有趣的图(五)(59)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 咱们今天继续学习图的应用&#xff0c;这些算法都是实际问题抽象出来的。 举个例子吧&#xff01; 下面6个城市&a…

第八章ThreadLocal

文章目录 先看面试题什么是ThreadLocal能干嘛基本使用常用方法 使用ThreadLocal来解决使用sychronized解决ThreadLocal与synchronized的区别 强化理解数据隔离的意义为什么线程执行完要remove 运用场景_事务案例场景构建 引入事务JDBC中关于事务的操作的api常规解决方案常规方案…

javascript程序员简历模板(合集)

javascript程序员简历模板一 个人资料 姓 名&#xff1a; 性 别&#xff1a; 女 年 龄&#xff1a; 21 民 族&#xff1a; 汉族 户籍&#xff1a; 湖北 襄樊 最高学历&#xff1a; 本 科 现所在地&#xff1a; 广东 广州 毕业院校&#xff1a; 南京理工大学 所学专业&#xff1…

忘记 localStorage 吧,indexedDB 才是前端存储新宠!

前言 在项目开发过程中&#xff0c;前端需要存储大量的数据。cookie, localstorage 都有存储长度限制。表格一览 特性cookielocalStoragesessionStorageindexedDB数据生命周期一般由服务器生成&#xff0c;可以设置过期时间&#xff1b;前端采用和js-cookie等组件也可以生成除…

带货、文案策划看过来-让GPT30秒内帮你写出世界顶级文案

开篇 在这个充满竞争的市场环境中,一句响亮的品牌短语,往往能让消费者对你的品牌印象深入脑海。俗话说:“言短意赅,反而显得深邃。”这不正是品牌短语的形式特点吗?而这种言简意赅、朗朗上口的品牌短语,在中国市场上就显得尤为重要。因为它直击心灵,与消费者之间一夕之…

Fiddler 八个实用技巧

大家对Fiddler应该不会陌生&#xff0c;但里面有些技巧不见得都会&#xff0c;这里就有八个实用技巧&#xff0c;通过对Fiddler的定制&#xff0c;能提高大家的测试效率。 1、双击Session时&#xff0c;使响应页始终显示到”json”tab页&#xff1b;使请求页始终显示到“webfo…

【LLM GPT】李宏毅大型语言模型课程

目录 1 概述1.1 发展历程1.2 预训练监督学习预训练的好处 1.3 增强式学习1.4 对训练数据的记忆1.5 更新参数1.6 AI内容检测1.7 保护隐私1.8 gpt和bert穷人怎么用gpt 2 生成式模型2.1 生成方式2.1.1 各个击破 Autoregressive2.1.2 一次到位 Non-autoregressive2.1.3 两者结合 2.…

js包管理yarn与npm,yarn安装,yarn 不是内部或外部命令

目录 yarn与npm 优势 用法区别 安装yarn 报错 yarn 不是内部或外部命令 运行代码&#xff08;yarn dev&#xff09; yarn与npm yarn由Facebook为解决npm的一些问题而创建的 优势 快速 本地缓存并行下载 - Yarn并行下载&#xff0c;还可以直接从硬盘缓存中读取包&…

python3 爬虫相关学习8:python 的常见报错内容汇总(持续收集ing)

目录 1 低级错误&#xff08;比如拼写错误等&#xff09; 1.1 NameError: 1.2 属性错误 AttributeError: 属性拼写错误 2 应用错误&#xff08;类型应用&#xff0c;属性使用的错误&#xff09; 2.1 类型错误 TypeError: 如字符串连接错误 2.2 属性应用错误 Attribu…

【枚举区间思想+DP】子串的子序列

F-子串的子序列_牛客小白月赛62 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 复盘一下应该有的思路&#xff1a; 首先n^2枚举肯定超时&#xff0c;我们枚举的是一个区间 枚举区间有一些trick&#xff1a; 1.枚举其中一个右&#xff08;左&#xff09;端点&#xff…

基于simulink车辆动力学可视化仿真(附源码)

一、前言 车辆动力学是研究汽车在行驶过程中的运动学和力学特性的学科。它研究车辆在不同路面条件、不同驾驶情况下的加速、制动、转向等运动状态&#xff0c;并通过建立数学模型来分析和优化车辆的性能和安全性。车辆动力学是汽车工程、机械工程和物理学等学科的交叉领域&…

【C语言11】文件操作(fgtec,fputc,fgets,fputs,fscanf,fprintf)

1.什么是文件 磁盘上的文件是文件。 但是在程序设计中&#xff0c;我们一般谈的文件有两种&#xff1a;程序文件、数据文件&#xff08;从文件功能的角度来分类的&#xff09;。 程序文件 包括源程序文件&#xff08;后缀为.c&#xff09;,目标文件&#xff08;windows环境后…

unittest教程__expectedFailure预期用例失败(5)

在断言用例执行结果时&#xff0c;会出现预期结果与实际结果不一致的情况&#xff0c;此时我们明确知道用例执行结果为FAIL&#xff0c;不想看到打印错误信息怎么办&#xff1f; 使用装饰器unittest.expectedFailure标记该用例。 import unittestclass Demo(unittest.TestCas…

Tcl常用命令备忘录-format与scan

format 语法&#xff1a;format formatString arg arg ... 参数介绍&#xff1a; formatString&#xff1a;格式化字符串&#xff0c;使用各种标识符和修饰符进行格式化。arg&#xff1a;被格式化的变量或字符串。 Tcl语言中的format命令可以用来格式化字符串输出&#xff…

Autosar代码解析-Source Insight的使用

文章目录 一、Source Insight简介二、Autosar代码查看三、解决办法一、Source Insight简介 Source insight是一款简洁、强大的轻量级代码浏览编辑器,启动快、使用便捷,很多程序员应该都使用过!它几乎支持所有的语言,比如C、C++、ASMA汇编、HTML等,能创建并维护其高性能的符…

【软件测试】性能测试服务端—排查指标问题(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 软件性能测试的目…

【数据类型】C#和Sql Server、Mysql、Oracle等常见数据库的数据类型对应关系

&#x1f3c6;&#x1f3c6;这是小5写的第二篇城市领跑者文章&#xff0c;一起为所在城市领跑助力吧&#xff01; &#x1f3c6;&#x1f3c6;在实际项目中&#xff0c;不管是用C#后端编程语言也好&#xff0c;还是Java后端编程语言&#xff0c;都可能会用到不同端的数据类型转…

JAVA-MAVEN初学者教程(配置、pom.xml、依赖管理等)

目录 认识MAVEN安装&配置MAVENwindows安装MAVENMAVEN的配置本地仓库 localRepository镜像 mirrors代理仓库 respositories代理 proxies IDEA配置MAVEN&#xff08;一个module&#xff09; MAVEN生命周期install下载包 模块的pom.xml坐标gav打包方式 package属性值 properti…