百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

React 也就这么回事 05 —— 组件 & Props

liuian 2025-03-07 20:53 45 浏览

什么是组件:用来实现局部功能的可复用代码片段

比如很多界面会用到“分页”功能,因此可以将它封装成独立的组件

这样用到分页的界面只需引入该组件而不必重新写代码

1 定义组件

在 React 中有两种组件,一种是函数组件,一种是类组件

1.1 函数组件

定义组件最简单的方式就是编写 JavaScript 函数

对 React 来说,能够返回一个 React 元素的 函数 就叫组件

function MyComponent() {
    return 

我是一个函数组件

; }

在线代码

1.2 class 组件

类组件的声明过程会比较繁琐一些,需要使用 class、extends 关键字,来继承React.Component{}

render()函数会返回该类的实例要创建的元素。

class MyComponent extends React.Component {
    render() {
        return 

我是一个class组件

; } }

在线代码

无论是函数组件还是class组件,在 React 中是等效的,不过 class 组件有更多的特性

2 渲染组件

同一个组件在不同界面使用,可能会想要展示不同的内容

比如我们自定义的组件包含了一个h2标签,如果我们想要在两个不同的界面分别展示函数class怎么办?

可以在使用组件时添加属性,react 会将添加的属性转换为一个对象传递给组件,这个对象称为"props"

函数组件和class组件可以分别通过“形参”和实例属性来使用这个对象

比如:

function MyComponent(props) {
    console.log(props)
    return 

我是一个函数组件

; } ReactDOM.render( , document.getElementById("root") );
class MyComponent extends React.Component {
    render() {
        console.log(this.props);
        return 

我是一个class组件

; } } ReactDOM.render( , document.getElementById("root") );

两者输出同样的对象:

在线代码

于是我们可以传入不同的属性,来让组件呈现不同的内容:

function MyComponent(props) {
    return 

我是一个{props.name}组件

; } ReactDOM.render( , document.getElementById("root") );

在线代码

这个例子中发生了这些事:

  1. 我们调用 ReactDOM.render() 函数,并传入 作为参数。
  2. React 调用 MyComponent 组件,并将 {name: '自定义函数'} 作为 props 传入。
  3. MyComponent 组件将

    我是一个自定义函数组件

    元素作为返回值。
  4. React DOM 将 DOM 高效地更新为

    我是一个自定义函数组件

3 注意点

  • 组件名称必须以大写字母开头。
  • 传入属性值为字符串和数字的区别:数字:字符串:
  • 多个属性可以使用扩展运算符const obj = { name: 'React', age: 18 }

    注意{}不能省略

在线代码

3 组合组件

组件可以在其输出中引用其他组件

例如,我们可以创建一个可以多次渲染 Welcome 组件的 App 组件:

function Welcome(props) {
  return 

Hello, {props.name}

; } function App() { return (
); } ReactDOM.render( , document.getElementById('root') );

这就可以让我们用同一组件来构建不同层次的新组件

在线代码

4 提取组件

对于一个复杂的组件,我们应该尽量将其拆分为更小的组件,以提高其可维护性和可读性

例如,参考如下 Comment 组件:

function Comment(props) {
  return (
    
{props.author.name}
{props.author.name}
{props.text}
{formatDate(props.date)}
); }

该组件用于描述一个社交媒体网站上的评论功能,它接收 author(对象),text (字符串)以及 date(日期)作为 props。

该组件由于嵌套的关系,变得难以维护,且很难复用它的各个部分。因此,让我们从中提取一些组件出来。

首先,我们将提取 Avatar 组件:

function Avatar(props) {
  return (
    {props.user.name}
  );
}

Avatar 不需知道它在 Comment 组件内部是如何渲染的。因此,我们给它的 props 起了一个更通用的名字:user,而不是 author

建议从组件自身的角度命名 props,而不是依赖于调用组件的上下文命名。

现在可以在Comment中引用Avatar组件了:

function Comment(props) {
  return (
    
{props.author.name}
{props.text}
{formatDate(props.date)}
); }

接下来,我们将提取 UserInfo 组件,该组件在用户名旁渲染 Avatar 组件:

function UserInfo(props) {
  return (
    
{props.user.name}
); }

进一步简化 Comment 组件:

function Comment(props) {
  return (
    
{props.text}
{formatDate(props.date)}
); }

5 Props 的只读性

对于 props,React 有一个严格的规则:

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

6 计时器

function tick() {
  const element = (
   

当前时间: {new Date().toLocaleTimeString()}.

); ReactDOM.render(element, document.getElementById('root')); } setInterval(tick, 1000);

这个例子中,每秒调用一次 tick 函数,页面会更新当前时间

在线代码

将它封装为一个组件:

class Clock extends React.Component {
  render() {
    return 

现在时间:{new Date().toLocaleTimeString()}

; } } function tick() { ReactDOM.render(, document.getElementById("root")); } setInterval(tick, 1000);

我们将时间写死在了 JSX 中

在线代码

如果我们想自己传入显示的内容:

class Clock extends React.Component {
  render() {
    const time = this.props.time;
    return 

现在时间:{time}

; } } function tick() { ReactDOM.render( , document.getElementById("root") ); } setInterval(tick, 1000);

这样我们就可以控制显示的格式

在线代码

The End

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...