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

HoRain云--React Props

🎬 HoRain云小助手:个人主页

🔥 个人专栏: 《Linux 系列教程》《c语言教程》

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

使用 Props

React 实例

默认 Props

React 实例

多个 Props

实例

propTypes 验证

实例

传递回调函数作为 Props

实例

解构 Props

实例

小结

State 和 Props

React 实例

Props 验证

React 16.4 实例

React 15.4 实例

实例


在 React 中,Props(属性)是用于将数据从父组件传递到子组件的机制,Props 是只读的,子组件不能直接修改它们,而是应该由父组件来管理和更新。

state 和 props 主要的区别在于props是不可变的,而 state 可以根据与用户交互来改变。这就是为什么有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。


使用 Props

传递 Props 语法:

<ComponentName propName={propValue} />

以下实例演示了如何在组件中使用 props:

React 实例

function HelloMessage(props) { return <h1>Hello {props.name}!</h1>; } const element = <HelloMessage name="Runoob"/>; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( element );


尝试一下 »

实例中 name 属性通过 props.name 来获取。


默认 Props

你可以通过组件类的 defaultProps 属性为 props 设置默认值,实例如下:

React 实例

class HelloMessage extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); } } HelloMessage.defaultProps = { name: 'Runoob' }; const element = <HelloMessage/>; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( element );

多个 Props

可以传递多个属性给子组件。

实例

const UserCard = (props) => {
return (
<div>
<h2>{props.name}</h2>
<p>Age: {props.age}</p>
<p>Location: {props.location}</p>
</div>
);
};

const App = () => {
return (
<UserCard name="Alice" age={25} location="New York" />
);
};

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

propTypes 验证

propTypes 是 React 提供的一种工具,用于对组件的 props 进行类型检查。

可以使用 prop-types 库对组件的 props 进行类型检查。

在 React 中,propTypes 作为组件的一个静态属性来定义。首先,你需要安装 prop-types 包:

npm install prop-types

然后,在你的组件文件中引入 prop-types,并定义 propTypes 属性。下面是一个示例

实例

import PropTypes from 'prop-types';

const Greeting = (props) => {
return <h1>Hello, {props.name}!</h1>;
};

Greeting.propTypes = {
name: PropTypes.string.isRequired
};

const App = () => {
return (
<div>
<Greeting name="Alice" />
{/* <Greeting /> // 这行代码会导致控制台警告,因为 name 是必需的 */}
</div>
);
};

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

传递回调函数作为 Props

可以将函数作为 props 传递给子组件,子组件可以调用这些函数来与父组件进行通信。

实例

class ParentComponent extends React.Component {
constructor(props) {
super(props);
this.state = { message: '' };
}

handleMessage = (msg) => {
this.setState({ message: msg });
};

render() {
return (
<div>
<ChildComponent onMessage={this.handleMessage} />
<p>Message from Child: {this.state.message}</p>
</div>
);
}
}

const ChildComponent = (props) => {
const sendMessage = () => {
props.onMessage('Hello from Child!');
};

return (
<div>
<button onClick={sendMessage}>Send Message</button>
</div>
);
};

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

解构 Props

在函数组件中,可以通过解构 props 来简化代码。

实例

const Greeting = ({ name }) => {
return <h1>Hello, {name}!</h1>;
};

const App = () => {
return <Greeting name="Alice" />;
};

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

小结


State 和 Props

以下实例演示了如何在应用中组合使用 state 和 props 。我们可以在父组件中设置 state, 并通过在子组件上使用 props 将其传递到子组件上。在 render 函数中, 我们设置 name 和 site 来获取父组件传递过来的数据。

React 实例

class WebSite extends React.Component { constructor() { super(); this.state = { name: "菜鸟教程", site: "https://www.runoob.com" } } render() { return ( <div> <Name name={this.state.name} /> <Link site={this.state.site} /> </div> ); } } class Name extends React.Component { render() { return ( <h1>{this.props.name}</h1> ); } } class Link extends React.Component { render() { return ( <a href={this.props.site}> {this.props.site} </a> ); } } const root = ReactDOM.createRoot(document.getElementById("root")); root.render( <WebSite /> );


尝试一下 »


Props 验证

React.PropTypes 在 React v15.5 版本后已经移到了prop-types库。

<script src="https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/prop-types/15.8.1/prop-types.min.js" type="application/javascript"></script>

Props 验证使用propTypes,它可以保证我们的应用组件被正确使用,React.PropTypes 提供很多验证器 (validator) 来验证传入数据是否有效。当向 props 传入无效数据时,JavaScript 控制台会抛出警告。

以下实例创建一个 Mytitle 组件,属性 title 是必须的且是字符串,非字符串类型会自动转换为字符串 :

React 16.4 实例

var title = "菜鸟教程"; // var title = 123; class MyTitle extends React.Component { render() { return ( <h1>Hello, {this.props.title}</h1> ); } } MyTitle.propTypes = { title: PropTypes.string }; const root = ReactDOM.createRoot(document.getElementById("root")); root.render( <MyTitle title={title} /> );

React 15.4 实例

var title = "菜鸟教程"; // var title = 123; var MyTitle = React.createClass({ propTypes: { title: React.PropTypes.string.isRequired, }, render: function() { return <h1> {this.props.title} </h1>; } }); const root = ReactDOM.createRoot(document.getElementById("root")); root.render( <MyTitle title={title} /> );

当然,可以为你介绍更多的PropTypes验证器以及如何使用它们。以下是一些常用的PropTypes验证器说明:

基本数据类型

特殊类型

组合类型

其他

以下是一些示例代码,展示了如何使用不同的PropTypes验证器:

实例

import React from 'react';
import ReactDOM from 'react-dom/client';
import PropTypes from 'prop-types';

class MyComponent extends React.Component {
static propTypes = {
title: PropTypes.string.isRequired, // 必须是字符串且必需
age: PropTypes.number, // 可选的数字
isAdmin: PropTypes.bool, // 可选的布尔值
user: PropTypes.shape({ // 必须是具有特定形状的对象
name: PropTypes.string,
email: PropTypes.string
}),
items: PropTypes.arrayOf(PropTypes.string), // 必须是字符串数组
callback: PropTypes.func, // 可选的函数
children: PropTypes.node, // 可选的可以渲染的内容
options: PropTypes.oneOf(['option1', 'option2']), // 必须是特定值之一
};

render() {
return (
<div>
<h1>{this.props.title}</h1>
{this.props.age && <p>Age: {this.props.age}</p>}
{this.props.isAdmin && <p>Admin</p>}
{this.props.user && (
<div>
<p>Name: {this.props.user.name}</p>
<p>Email: {this.props.user.email}</p>
</div>
)}
{this.props.items && (
<ul>
{this.props.items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
)}
{this.props.callback && (
<button onClick={this.props.callback}>Click me</button>
)}
{this.props.children}
{this.props.options && <p>Option: {this.props.options}</p>}
</div>
);
}
}

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<MyComponent
title="Hello, World!"
age={30}
isAdmin={true}
user={{ name: "John Doe", email: "john@example.com" }}
items={['Item 1', 'Item 2', 'Item 3']}
callback={() => alert('Button clicked!')}
options="option1"
>
<p>This is a child element</p>
</MyComponent>
);

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.zskr.cn/news/1529034.html

相关文章:

  • AI大模型训练工作站/制造业AI质检工作站DLTM助力制造业质检智能化升级
  • 计算机毕业设计之小学生课后反馈管理小程序的设计与实现
  • 网页视频资源一键获取神器:猫抓浏览器扩展终极指南
  • 手贱关了CCleaner这个服务,结果MATLAB、Multisim全打不开了?附完整修复流程
  • 【项目实训MemeMind——Blog5】
  • 小白程序员必看:收藏这份RAG指南,轻松学习大模型减少幻觉的秘诀!
  • 零代码私有化自动化AI算法训练服务器DLTM如何破解企业AI落地难题
  • 嵌入式以太网控制器寄存器编程实战:从MSC8113看驱动开发核心
  • 按需选店不踩坑!2026 年洛阳数码维修租赁回收店实用选购指南 - 资讯纵览
  • 如何快速使用开源工具applera1n:iOS激活锁绕过的完整指南
  • MSC711x DSP系统性能调优:内存访问与DMA传输优化实战指南
  • 避坑指南:Redis GEO在Spring Boot中计算距离的3个常见错误与正确姿势
  • 2026年人事业财生产一体化实战手册;无锡钉钉数字化管理系统选型指南: - 优质企业观察收录
  • WarcraftHelper:魔兽争霸III终极性能优化与兼容性修复完全指南
  • 深入解析YOLOv9:可编程梯度信息引领的信息瓶颈破解之道 —— 完整原理、实现与部署指南
  • 2026年五大有实力的电磁溢流阀专业加工品牌对比清单 - 资讯纵览
  • MPC866 PowerQUICC处理器核心架构与指令集深度解析
  • 如何注销自己的营业执照?营业执照注销攻略来了! - 慧办好
  • 2026驻马店建材行业,哪家做短视频代运营比较靠谱? - 年度推荐企业名录
  • 中国电子学会图形化2021.3月Scratch四级考级题
  • 2026平湖海宁嘉善黄金回收铂金回收钯金回收深度实测 三城连锁门店横评 透明报价免费上门才是硬道理 - 久盈
  • 【鸿蒙】ArkUI 自定义组件:Builder 函数与 AttributeModifier 深度解析
  • 2026甘肃发电机租赁市场优选:从选购到服务的全流程指南 - 品研笔录
  • 【Android】Room 数据库高级用法与性能调优:从查询瓶颈到毫秒级响应
  • 密码学基础知识(0基础小白版,超详细!!!)
  • 组织竞争力 = 人才密度 x AI杠杆 / 组织摩擦
  • 基于GCSF、IFNγ、IL10、IL12、IL13、IL1α、TNFα的Luminex多因子检测,解析免疫炎症稳态调控新机制
  • 避坑指南:SAP ME21N增强ME_PROCESS_PO_CUST开发中常见的5个报错与调试方法
  • 青岛装修避坑必看!2026 正规家装公司 TOP5 中易盛装饰实力领跑 - 资讯纵览
  • SpringBoot+Vue美食网站源码+论文