当前位置: 首页 > news >正文

React - 组件之props属性

在 React 中,props(即属性)是组件之间传递数据的一种方式。它是 React 组件的基础,用于将数据从父组件传递到子组件。

一、类组件中

1. props 的作用

  • 数据传递props 允许父组件向子组件传递数据。子组件可以使用这些数据来渲染内容、改变显示的内容等。
  • 控制组件行为: 通过 props,父组件可以控制子组件的行为和外观。这些属性可以是基本数据类型、函数、数组等。
  • 组件间的通信props 是父子组件通信的重要机制。子组件不能直接修改父组件的状态,但可以通过 props 收到函数作为属性,进而通知父组件去更新状态。

 2. 基本语法

传递 props

父组件可以向子组件传递 props,使用自定义标签时就像设置 HTML 属性一样:

// 父组件
class ParentComponent extends React.Component {render() {return (<ChildComponent name="Alice" age={10} />);}
}

 在上面的例子中,父组件 ParentComponent 向子组件 ChildComponent 传递了两个属性:name 和 age

接收 props

子组件通过 this.props 访问传递给它的 props,可以在 render() 方法或其他生命周期方法中使用:

// 子组件
class ChildComponent extends React.Component {render() {return (<div><p>Name: {this.props.name}</p><p>Age: {this.props.age}</p></div>);}
}

3. props 的特点

  • 不可变性: props 是只读的,子组件不能直接修改从父组件传递来的 props如果需要更新状态,应该通过回调函数通知父组件由父组件来更改状态。

  • 动态更新: 当父组件的状态发生变化时,React 会重新渲染子组件,并更新 props 中的值。

// 父组件
class ParentComponent extends React.Component {constructor(props) {super(props);this.state = {name: "Alice",age: 10};}incrementAge = () => {this.setState(prevState => ({ age: prevState.age + 1 }));};render() {return (<div><ChildComponent name={this.state.name} age={this.state.age} incrementAge={this.incrementAge} /></div>);}
}// 子组件
class ChildComponent extends React.Component {render() {return (<div><h1>Name: {this.props.name}</h1><h2>Age: {this.props.age}</h2><button onClick={this.props.incrementAge}>Increment Age</button></div>);}
}// 渲染组件
ReactDOM.render(<ParentComponent />, document.getElementById('root'));

4. 组件的 propTypes 和默认 props

 import PropTypes from 'prop-types';// 定义属性类型Person.propTypes = {name: PropTypes.string.isRequired, // 必传,字符串age: PropTypes.number.isRequired,   // 必传,数字sex: PropTypes.string                // 可选,字符串speak:PropTypes.func                 // 可选,函数};// 定义默认属性(可选)Person.defaultProps = {sex: '未知' // 如果未传性别,默认是 '未知'};
// 定义规则// Sum.属性规则 = {//     name:'必传,字符串'// }// 定义属性类型static propTypes = {name: PropTypes.string.isRequired, // 必传,字符串age: PropTypes.number.isRequired,   // 必传,数字sex: PropTypes.string                // 可选,字符串};// 定义默认属性(可选)static defaultProps = {sex: '未知' // 如果未传性别,默认是 '未知'};

// 可以这样访问
console.log(Person.propTypes); // 访问类中的静态 propTypes
console.log(Person.defaultProps); // 访问类中的静态 defaultProps// 而不能这样访问const instance = new Person();
console.log(instance.propTypes); // 这会返回 undefined,因为 propTypes 是静态的

使用 static 关键字的主要目的是将某些属性或方法与类本身关联,而不是与任何实例相关。在 React 组件中,这通常用于定义 propTypes 和 defaultProps,确保这些配置在类的上下文中清晰可见,并且可以通过类来直接访问。

二、函数组件中

函数式组件中三大属性只有Props属性可以使用

与类组件不同,函数组件没有实例,直接接受 props 作为参数。

import React from 'react';const MyComponent = (props) => {// const {title,content} = propsreturn (<div><h1>{props.title}</h1><p>{props.content}</p></div>);
};// 或
//const MyComponent = ({ name, age }) => {
//    return (
//        <div>
//           <p>名称: {name}</p>
//            <p>年龄: {age}</p>
//        </div>
//    );
//};// 默认属性
MyComponent.defaultProps = {name: '匿名',age: 0,
};

相关文章:

React - 组件之props属性

在 React 中&#xff0c;props&#xff08;即属性&#xff09;是组件之间传递数据的一种方式。它是 React 组件的基础&#xff0c;用于将数据从父组件传递到子组件。 一、类组件中 1. props 的作用 数据传递: props 允许父组件向子组件传递数据。子组件可以使用这些数据来渲…...

PMTUD By UDP

通过UDP探测MTU&#xff0c;并实现udp echo server // Description: UDP echo server. // g udp_echo_server.cc -o udp_echo_server #include <iostream> #include <cstring> #include <arpa/inet.h> #include <unistd.h>#define PORT …...

Hutool - BloomFilter:便捷的布隆过滤器实现

1. 布隆过滤器简介 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间效率极高的概率型数据结构&#xff0c;用于判断一个元素是否存在于一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法&#xff0c;但缺点是有一定的误判率&#xff0c;即判断元素存在…...

【学习资源】时间序列数据分析方法(1)

时间序列数据分析是一个有趣的话题&#xff0c;让我们多花一些时间来研究。此篇为第一篇文章。主要介绍特征提取方法、深度学习时序数据分析模型、参考资源。期望能帮助大家解决工业领域的相关问题。 1 特征提取方法&#xff1a;信号处理 (来源:INTELLIGENT FAULT DIAGNOSIS A…...

盛铂科技SWFA100捷变频频率综合器:高性能国产射频系统的关键选择

在现代射频系统中&#xff0c;频率综合器是实现精确频率控制和快速跳频的核心组件。盛铂科技推出的SWFA100捷变频频率综合器凭借其卓越的性能和小型化设计&#xff0c;成为高性能射频系统中的理想选择。 SWFA100捷变频频率综合器 高速跳频与宽频覆盖 SWFA100捷变频频率综合器能…...

释放你的元数据:使用 Elasticsearch 的自查询检索器

作者&#xff1a;来自 Elastic Josh Asres 了解如何使用 Elasticsearch 的 “self-quering” 检索器来通过结构化过滤器提高语义搜索的相关性。 在人工智能搜索的世界中&#xff0c;在海量的数据集中高效地找到正确的数据至关重要。传统的基于关键词的搜索在处理涉及自然语言的…...

【快速幂算法】快速幂算法讲解及C语言实现(递归实现和非递归实现,附代码)

快速幂算法 快速幂算法可用分治法实现 不难看出&#xff0c;对任意实数a和非负整数n&#xff0c;有&#xff1a; a n { 1 , n 0 , a ≠ 0 0 , a 0 ( a n 2 ) 2 , n > 0 , n 为偶数 ( a n 2 ) 2 ∗ a , n > 0 , n 为奇数 a^n \begin{cases} 1, & n 0, a\neq 0…...

3. 导入官方dashboard

官方dashboard&#xff1a;https://grafana.com/grafana/dashboards 1. 点击仪表板 - 新建 - 导入 注&#xff1a;有网络的情况想可以使用ID&#xff0c;无网络情况下使用仪表板josn文件 2. 在官方dashboard网页上选择符合你现在数据源的dashboard - 点击进入 3. 下拉网页选…...

怎么理解 Spring Boot 的约定优于配置 ?

在传统的 Spring 开发中&#xff0c;大家可能都有过这样的经历&#xff1a;项目还没开始写几行核心业务代码&#xff0c;就已经在各种配置文件中耗费了大量时间。比如&#xff0c;要配置数据库连接&#xff0c;不仅要在 XML 文件里编写冗长的数据源配置&#xff0c;还要处理事务…...

Dify 是什么?Dify是一个开源的LLM应用开发平台,支持快速搭建生成式AI应用,具有RAG管道、Agent功能、模型集成等特点

首先&#xff0c;Dify是一个开源的LLM应用开发平台&#xff0c;支持快速搭建生成式AI应用&#xff0c;具有RAG管道、Agent功能、模型集成等特点75。根据搜索结果&#xff0c;网页6详细对比了多个RAG和AI开发框架&#xff0c;包括MaxKB、FastGPT、RagFlow、Anything-LLM等。其中…...

数据预处理都做什么,用什么工具

数据预处理是数据分析、数据挖掘和机器学习中的关键步骤&#xff0c;其目的是将原始数据转换为适合后续分析或建模的格式。以下是关于数据预处理的主要内容及常用工具的详细介绍&#xff1a; 一、数据预处理的主要任务 数据预处理的主要任务包括以下几个方面&#xff1a; 数据…...

windows蓝牙驱动开发-在蓝牙配置文件驱动程序中接受 L2CAP 连接

L2CAP 服务器配置文件驱动程序会响应来自远程设备的传入逻辑链接控制和适应协议 (L2CAP) 连接请求。 例如&#xff0c;PDA 的 L2CAP 服务器配置文件驱动程序将响应来自 PDA 的传入连接请求。 接收传入 L2CAP 连接请求 1. 若要接收来自特定 PSM 的任何远程设备的传入 L2CAP 连…...

【原理图PCB专题】自制汉字转码工具,适配Allgero 17版本 Skill

众所周知,在使用Skill来编写Allegro控制脚本时如果程序的源码里是汉字,那么有可能会出现乱码。比如像下图这样的程序: 在Allegro中运行如下图所示: 那么如果我们需要让他转成正常的中文字符,就需要将字符转成GBK编码 打开自制小软件:中文与GBK编码互转V1…...

欧拉公式在信号处理中的魔法:调幅信号的生成与频谱分析

欧拉公式在信号处理中的魔法:调幅信号的生成与频谱分析 “数学不是枯燥的符号,而是宇宙的诗歌。” 当我们用欧拉公式解开调幅信号的频谱密码时,仿佛看到电磁波在时空中跳动的频率之舞。这篇博客将带你亲手触摸信号处理中的数学之美。 一、当欧拉公式遇见调幅信号:一场数学与…...

如何在Ubuntu中切换多个PHP版本

在Ubuntu环境下实现PHP版本的灵活切换&#xff0c;是众多开发者与系统管理员的重要技能之一。下面&#xff0c;我们将深入探讨如何在Ubuntu系统中安装、配置及管理多个PHP版本&#xff0c;确保您的开发环境随心所欲地适应各类项目需求。 开始前的准备 确保您的Ubuntu系统保持…...

基于opencv的HOG+角点匹配教程

1. 引言 在计算机视觉任务中&#xff0c;特征匹配是目标识别、图像配准和物体跟踪的重要组成部分。本文介绍如何使用 HOG&#xff08;Histogram of Oriented Gradients&#xff0c;方向梯度直方图&#xff09; 和 角点检测&#xff08;Corner Detection&#xff09; 进行特征匹…...

Linux线程概念与线程操作

Linux线程概念与线程操作 线程概念 前面提到进程程序代码和数据进程结构体&#xff0c;在线程部分就需要进一步更新之前的认识 进程实际上承担分配系统资源的基本实体&#xff0c;而线程是进程中的一个执行分支&#xff0c;是操作系统调度的基本单位 此处需要注意&#xff0…...

AI软件栈:LLVM分析(五)

数据流分析是编译优化、代码生成的关键理论。其数学基础是离散数学中的半格(Semi-Lattice)和格。半格与格不仅是编译优化和代码生成的重要理论基础,也是程序分析、验证及自动化测试的系统理论基础。 文章目录 格、半格与不动点格、半格与不动点 半格是指针对二元组 < S …...

Git指南-从入门到精通

代码提交和同步命令 流程图如下&#xff1a; 第零步: 工作区与仓库保持一致第一步: 文件增删改&#xff0c;变为已修改状态第二步: git add &#xff0c;变为已暂存状态 bash $ git status $ git add --all # 当前项目下的所有更改 $ git add . # 当前目录下的所有更改 $ g…...

Linux 文件系统挂载

系列文章目录 Linux内核学习 Linux 知识&#xff08;1&#xff09; Linux 知识&#xff08;2&#xff09; WSL Ubuntu QEMU 虚拟机 Linux 调试视频 PCIe 与 USB 的补充知识 vscode 使用说明 树莓派 4B 指南 设备驱动畅想 Linux内核子系统 Linux 文件系统挂载 文章目录 系列文章…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...