”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Day 组件和 Props - ReactJS

Day 组件和 Props - ReactJS

发布于2024-11-05
浏览:173

Day Components and Props - ReactJS

欢迎来到“ReactJS 30 天”挑战的第四天!今天,我们将探索 Components 和 Props——任何 React 应用程序的构建块。了解这些概念将使您能够将 UI 分解为可重用的独立部分。

什么是组件?

React 中的组件就像菜谱中的成分。正如您组合不同的成分来制作菜肴一样,您也可以组合组件来构建 React 应用程序。组件是一个 JavaScript 函数或类,可以选择接受输入(称为 props)并返回一个描述屏幕上应显示内容的 React 元素。

React中有两种主要类型的组件:

功能组件: 这些是返回 JSX 的 JavaScript 函数。它们更简单、更容易阅读。

类组件: 这些是从 React.Component 扩展的 ES6 类。它们具有更多功能,例如状态和生命周期方法,但在现代 React 开发中不太常见。

示例:按钮组件

让我们创建一个简单的按钮组件:

function Button() {
  return (
    
  );
}

此 Button 组件是一个功能组件,它返回一个带有文本“Click me!”的按钮元素。

为什么组件很重要

组件允许您将 UI 分解为更小的、可管理的部分。这使您的代码更有组织性并且更易于维护。想象一下尝试烹饪一道复杂的菜肴而不将其分解为多个步骤。那就太混乱了!同样,构建没有组件的 UI 可能会变得难以承受。

现实生活中的例子:乐高积木
想想像乐高积木这样的组件。每个块(组件)都是应用程序的一部分,您可以将它们组合起来创建更大的东西。就像乐高积木一样,组件可以在应用程序的不同部分中重复使用。

什么是道具?
Props(“属性”的缩写)是将数据从一个组件传递到另一个组件的方式。它们与函数参数类似,可用于自定义组件。

例如,假设我们要创建一个 Button 组件,它可以根据收到的 props 显示不同的文本:

function Button(props) {
  return (
    
  );
}

现在,当您使用 Button 组件时,您可以传入 label 属性来自定义其文本:

function App() {
  return (
    
); }

此处,Button 组件使用了两次,但具有不同的标签:“提交”和“取消”。

道具的重要性

Props 使您的组件更加灵活和可重用。您可以通过 props 传入动态数据,而不是在组件内硬编码值,从而允许您在不同的上下文中使用相同的组件。

使用Vite设置组件和道具

由于我们使用 Vite 作为开发环境,因此设置组件和 props 非常简单。如果您一直在操作,那么您的 Vite 项目已经配置完毕。您可以开始在单独的文件中创建组件并将它们导入到您的主应用程序中。

以下是构建项目的方法:

1。创建新组件: 在 src 文件夹中创建一个新文件 Button.jsx,并在其中定义 Button 组件。
2.在您的应用程序中使用该组件: 在您的 App.jsx 文件中,导入 Button 组件并将其与不同的 props 一起使用。

把它们放在一起

组件和 props 是 React 基于组件的架构的核心。通过将 UI 分解为更小的组件并使用 props 在它们之间传递数据,您可以构建可扩展且可维护的应用程序。

明天,我们将深入研究状态和生命周期方法,这将使您的组件能够管理动态数据并响应随时间变化的变化。

版本声明 本文转载于:https://dev.to/haquedot/day-4-components-and-props-reactjs-5e8f?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-04-17
  • 对象拟合:IE和Edge中的封面失败,如何修复?
    对象拟合:IE和Edge中的封面失败,如何修复?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    编程 发布于2025-04-17
  • 如何避免Go语言切片时的内存泄漏?
    如何避免Go语言切片时的内存泄漏?
    ,a [j:] ...虽然通常有效,但如果使用指针,可能会导致内存泄漏。这是因为原始的备份阵列保持完整,这意味着新切片外部指针引用的任何对象仍然可能占据内存。 copy(a [i:] 对于k,n:= len(a)-j i,len(a); k
    编程 发布于2025-04-17
  • Python中何时用"try"而非"if"检测变量值?
    Python中何时用"try"而非"if"检测变量值?
    使用“ try“ vs.” if”来测试python 在python中的变量值,在某些情况下,您可能需要在处理之前检查变量是否具有值。在使用“如果”或“ try”构建体之间决定。“ if” constructs result = function() 如果结果: 对于结果: ...
    编程 发布于2025-04-17
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-04-17
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-04-17
  • 如何高效地在一个事务中插入数据到多个MySQL表?
    如何高效地在一个事务中插入数据到多个MySQL表?
    mySQL插入到多个表中,该数据可能会产生意外的结果。虽然似乎有多个查询可以解决问题,但将从用户表的自动信息ID与配置文件表的手动用户ID相关联提出了挑战。使用Transactions和last_insert_id() 插入用户(用户名,密码)值('test','test...
    编程 发布于2025-04-17
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-04-17
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-04-17
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-04-17
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-04-17
  • 解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    mysql错误1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的数据包,用于面对阴谋mysql错误1153,同时导入数据capase doft a Database dust?让我们深入研究罪魁祸首并探索解决方案以纠正此问题。理解错误此错误表明在导入过程中接...
    编程 发布于2025-04-17
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-04-17
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-04-17
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-04-17

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3