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

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

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

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

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

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

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

相关推荐

电脑声音设置一键恢复(电脑声音设置一键恢复在哪里)

1、打开控制面板添加新硬件,待搜寻完毕后,点“否,尚未添加此硬件”,点下一步后。在出现的对话框中,选中“单击完成,关闭无的计算机,重新启动来添加新硬件”。注意这里说的是关机后再启动,而不是重新启动.再...

英伟达声卡驱动(英伟达声卡驱动怎么卸载)
英伟达声卡驱动(英伟达声卡驱动怎么卸载)

  1、首先呢,要确保工作站安装了正确的显卡驱动程序。安装正常的显卡驱动程序后,操作系统里的控制面板里会有NVIDIA控制面板,点击进去会有如下界面。  2、在3D设置里,第一项菜单通过预览调整图像设置,选择使用我的优先选择,侧重于性能,...

2026-01-08 14:55 liuian

win10安装sql2000教程(win10怎样安装sql2000)

1.下载SQLServer2000安装文件你可以在微软官网下载SQLServer2000安装文件。注意选择与你的系统版本相符合的文件。2.安装SQLServer2000在Win10系统...

arp防火墙怎么关闭(arp防火墙是什么意思)

ARP防火墙功能现在已经不作为独立的功能进行提供。可以通过下面的方法进行体检,检测你的电脑是否需要原ARP防火墙的功能。1、点击360安全卫士的右下角“更多”2、在弹出的界面中选择“流量防火墙”3、在...

万能钥匙免费下载官方正版(万能钥匙官方正版安装)
万能钥匙免费下载官方正版(万能钥匙官方正版安装)

1.在屏幕上找到应用市场,点击【应用市场】2.在搜索栏搜索【WiFi万能钥匙】,点击【安装】3、下载成功后安装到手机即可。步骤如下:1、打开手机应用商店,在搜索栏搜索WiFi万能钥匙软件。2、搜索到后,一般第一个软件就是,点击下载...

2026-01-08 13:05 liuian

笔记本设置wifi连接无线网络

关于笔记本电脑怎么设置无线网络连的具体分析如下:1、在电脑桌面左下角“开始”的“设置”里面,找到“网络连接”。2、进入“网络连接”,可以在该文件夹中看到“无线网络连接”。3、在“无线网络连接”上右...

limbo虚拟机官网(limbo虚拟机官网github)

要加快Limbo虚拟机的启动速度,可以尝试以下几个方法:1.分配更多的资源:增加虚拟机的内存和处理器资源可以提高系统的启动速度。可以尝试增加虚拟机的内存大小和处理器核心数。2.使用SSD硬盘:使用...

win11专业版无法激活(windows11专业版激活)

已超过密匙允许的最大数量Microsoft不接受您的产品密钥的最常见原因之一是输入的密钥已在允许的最大设备上使用。在这种情况下,您必须购买新的Windows11副本或产品密钥。除此之外,一些用...

驱动精灵驱动下载(驱动精灵驱动下载路径应该放在哪)

打开始菜单搜索无线驱动精灵官方下载。驱动精灵是有必要安装的,一个好的驱动程序往往能够更好的利用硬件,发挥更大的作用,而且如果驱动不对应或者驱动有问题是会严重影响系统稳定性的,比如显卡驱动,没有弄好往往...

打开组策略编辑器的命令是(windows打开组策略编辑器)
  • 打开组策略编辑器的命令是(windows打开组策略编辑器)
  • 打开组策略编辑器的命令是(windows打开组策略编辑器)
  • 打开组策略编辑器的命令是(windows打开组策略编辑器)
  • 打开组策略编辑器的命令是(windows打开组策略编辑器)
把u盘制作成启动盘(u盘制作成启动盘后怎么恢复原来的u盘文件)

打开软件制作U盘启动打开装机大师,选择启动U盘,点击制作U盘启动盘。选择版本点击开始制作选择任意系统版本,然后点击开始制作,点击确定。制作完成后点击预览耐心等待系统制作,制作完成后可以点击预览。希望我...

加密无线网怎么破解(加密无线网破解方法)

无线破解分很多,其中有2中,一种是没设置密码的,一种是设置密码的,设置密码的又分很多种:“wep/wap/wap2等,设置密码目前可以支持破解的是wep的方式,到网上下载个bt5、bt4、bt3,缉掸...

谷歌在线浏览器(谷歌在线代理浏览器)
谷歌在线浏览器(谷歌在线代理浏览器)

1.打开谷歌浏览器设置,点击右上方按钮2.点击设置3.点击同步功能和Google服务4.点击登录Chrome即可手机和电脑都可以下载谷歌浏览器。登录时需要创建一个账号和邮箱,需要记住自己的账号和密码,同时手机和电脑可以同步。...

2026-01-08 09:05 liuian

vs2019微软官网下载(microsoft visual studio官方下载)

原因是可能您的电脑环境不符合VS2022安装要求,或者您的安装程序出现了问题。所以导致了安装失败。同时,您可以尝试重新下载安装程序,或者检查电脑所有驱动程序是否更新到最新版本,或者关闭杀毒软件等其他可...

家用无线路由器哪个好(家用无线路由器哪个好用又实惠)

各有优劣,不能单纯的说是无线的好还是优先的好:1、有线路由器网络稳定,不会跳PING。但不能发射WiFi信号给手机上网,需要走线,受到布线约束。2、无线路由器和有线路由器最大的区别体现在和电脑的连接方...