”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > React 组件的大图

React 组件的大图

发布于2024-11-03
浏览:965

The Big Picture of React Component

在 React 中,组件就像用户界面 (UI) 的构建块。将其视为一小段可重用的代码,用于定义页面特定部分的外观和行为方式。这些组件允许开发人员通过组合简单、独立和可重用的部分来构建复杂的 UI。
一般来说,组件本质上是独立的、可重用的 UI 部分,可以将其视为呈现用户界面某些部分的函数。
我知道“独立”、“可重用部件”和“渲染”这些词可能会存在一些冲突。

为什么使用组件背后有 3 个主要问题。

  1. 可重用性
  2. 关注点分离
  3. 模块化
  • 可重用性确保创建一个组件一次并在您的应用程序中多次重用它。
  • 关注点分离确保每个组件专注于 UI 的特定部分,从而更容易管理和维护代码。
  • 模块化可确保将您的 UI 分解为小型、可管理的组件,从而更易于测试、调试和开发

我们通过定义组件来一一证明。哎呀!?我忘了你不知道如何定义一个简单的组件。不用担心我在这里吗?分解所有的东西。那么让我们潜水吧-?
假设您正在开发一个电子商务应用程序。在应用程序的多个地方或多个页面中,您需要渲染相同的产品卡。渲染意味着响应 UI。
现在是你的时间吗?思考?如何在应用程序中以多个页面显示产品卡。
传统上,当创建网页时,开发人员会通过添加一些 JavaScript 来标记其内容并添加交互。当相同标记的多个页面没有替换为多个页面时,这种方法非常有效,这会让您有时感到无聊,同时又令人厌烦,并且难以调试和管理。因此,有机会打破您的代码,管理起来可能很麻烦。
在这里你将发现React组件架构的美妙之处。 React 允许您创建组件并使用任意数量的位置。

// === Reminder ===
Components are regular javascript functions that can sprinkled with javascript
function ProductCard(){
  return(
      

title of the product

price of the product

description of the product

// rest of info
) }

让我们打破它-
步骤 1:声明一个简单的 javascript 函数作为 ProductCard name
步骤 2:组件/函数返回一个由其他标签组成的

标签。
// === Reminder ===
All tags must return under a parent tag or using a react fragment(>)
// === Reminder ===
React component name must start with a capital letter otherwise it won't treated as a component

ProductCard 组件返回一个 div 标签,其中包含 h1、h2、p 或其他一些像 HTML 一样编写的必要标签,但它的底层是 Javascript。该语法称为 JSX(javascript XML)。不用担心,我稍后会解释。

// === Reminder ===
JSX is a syntax extension for javascript that lets you write HTML-like markup inside a javascript file which handles the logic of rendering and markup live together in the same place as components.

现在您的组件可以使用了。例如,您有一个产品页面并且必须呈现一些产品。

//Products.js or jsx file
function ProductCard(){
  return(
      

title of the product

price of the product

description of the product

// rest of info
) } function ProductPage(){ return(

product page

) }

您的浏览器将渲染 3 次 ProductCard 意味着浏览器已可见 3 个产品卡。

重点是浏览器得到这个ProductPage代码后会如何反应
  • 是小写的,所以 React 知道它将被称为 HTML 标签
  • 以大写 P 开头,因此 React 知道它将被视为组件。

到目前为止,一切都很好?。我们已成功将产品卡呈现到产品页面。
现在该整理一下代码了:
您可能有一个或多个组件,例如 ProductCard、ProductReviewCard、SimilarProductCard 等。因此,在一个文件中声明和管理所有组件可能会很麻烦。因此,让我们仅使用文件结构使其更有组织性以进行管理。
让我们创建一个可重复使用的文件夹,因为 ProductCard 可能已在多个页面中使用。在可重用文件夹内创建 ProductCard.js/jsx 文件。

//reusable/ProductCard.js or jsx file
function ProductCard(){
  return(
      

title of the product

price of the product

description of the product

// rest of info
) }

现在有一点,如果您将 ProductCard 组件与 ProductPage 文件分开,将如何使用它。我知道您可能已经明白了,是的,我们可以从 ProductCardfile 中导出 ProductCard 函数,如您实际上更喜欢的命名或默认值。

//reusable/ProductCard.js or jsx file
export default function ProductCard(){
  return(
      

title of the product

price of the product

description of the product

// rest of info
) }

现在它可以从 ProductPage 文件中使用。只需从 ProductPagefile 导入 ProductCard,然后根据需要使用它即可。

//ProductPage.js or jsx file
import ProducrCard from './reusable/ProductCard.js'
function ProductPage(){
  return(
      

product page

) }

我之前提到过为什么应该使用组件——为了可重用性、关注点分离和模块化。

  • 我们的 ProductCard 组件现在完全可以重复使用。我们可以在任何地方使用它。
  • 在 ProductPage 中,可能有多个部分,例如 ProductCard、ProductReviewCard、SimilarProductCard、RecommendedProductCard 等。使其管理和维护代码,将其集中到单独的部分中,作为组件和部分。
  • 将 UI 分解为小块后,可以更轻松地测试、调试和开发。如果出现错误,我们可以轻松地从特定组件中找到错误/问题。 我希望现在更清楚了?

完成所有这些之后,您已经了解您也可以嵌套组件。

好吧,让我们再看一下-?
创建布局文件夹
在Layout文件夹下创建Header文件夹,然后在Header文件夹中创建index.js文件

export default function Header(){
  return(
      

Header

) }
create `Footer` folder under the `Layout` folder then create `index.js` file inside `Footer` folder
export default function Footer(){
  return(
      

Footer

) }

现在在Layout文件夹下创建index.js文件

import Header from './Header';
import Footer from './Footer';
export default function Layout(){
  return(
      

page content

) }

我希望你已经发现了 React 组件架构的美妙之处。这才刚刚开始,并试图在你的内心深处培养兴趣。
快乐编码??

版本声明 本文转载于:https://dev.to/hasan_rifat/the-big-picture-of-react-component-1o1m?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在 Linux 服务器上使 MySQL 不区分大小写:迁移解决方案
    如何在 Linux 服务器上使 MySQL 不区分大小写:迁移解决方案
    在 Linux 服务器上使 MySQL 不区分大小写在迁移场景中,以前托管在 Apple 服务器上的网站在迁移到 Linux 服务器后遇到问题,调查影响 MySQL 查询的潜在区分大小写差异至关重要。 Mac 和 Windows 服务器默认处理 MySQL 查询时不区分大小写,而 Linux 服务器...
    编程 发布于2024-11-15
  • 使用 NVIDIA AI 端点和 Ragas 评估医疗检索增强生成 (RAG)
    使用 NVIDIA AI 端点和 Ragas 评估医疗检索增强生成 (RAG)
    在医学领域,采用先进技术对于加强患者护理和改进研究方法至关重要。检索增强生成 (RAG) 是这些开创性创新之一,它将大型语言模型 (LLM) 的强大功能与外部知识检索相结合。通过从数据库、科学文献和患者记录中提取相关信息,RAG 系统提供了更准确、上下文更丰富的响应基础,解决了纯法学硕士中经常观察到...
    编程 发布于2024-11-15
  • 如何将 GitHub 存储库集成到“requirements.txt”中?
    如何将 GitHub 存储库集成到“requirements.txt”中?
    在requirements.txt中指定GitHub源要将从GitHub存储库安装的库集成到您的依赖项中,请修改您的requirements.txt文件如下:对于 GitHub 存储库,省略“package==version”命名约定。相反,请使用以下格式:package-name @ git gi...
    编程 发布于2024-11-15
  • 如何在 PHP 中将数字四舍五入到最接近的 10?
    如何在 PHP 中将数字四舍五入到最接近的 10?
    在 PHP 中将数字四舍五入到最接近的 10将数字四舍五入到最接近的 10 是编程中的常见任务。 PHP 提供了几个用于对数字进行四舍五入的内置函数,包括 Floor()、ceil() 和 round()。要将数字四舍五入到最接近的 10,我们可以使用 ceil() 函数。 ceil() 将数字向上...
    编程 发布于2024-11-15
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-11-15
  • 为什么 Golang 没有原生的 Set 数据结构?
    为什么 Golang 没有原生的 Set 数据结构?
    Golang 奇怪地缺乏集合数据结构在 Golang 中,对集合数据结构的基本需求导致了一个令人困惑的问题:为什么不是原生提供的吗?从 Google 颇具影响力的 Guava 库中汲取灵感,为什么 Golang 的设计者省略了对这样一个基本结构的支持,迫使开发人员自己设计实现?答案在于使用映射构建集...
    编程 发布于2024-11-15
  • 非常量成员函数和常量成员函数之间的“this”指针类型有什么区别?
    非常量成员函数和常量成员函数之间的“this”指针类型有什么区别?
    理解“This”指针的类型“this”指针是一个指向其成员函数所在对象的指针被称为。它由编译器自动提供,用于访问对象的成员。 “this”指针的类型取决于是否在非常量成员函数或常量成员函数中访问它。在非常量成员函数中,“this”的类型为“ClassName *”,其中ClassName 是类的名称...
    编程 发布于2024-11-15
  • 棘手的 Golang 面试问题 - Max 部分 goroutine 编号
    棘手的 Golang 面试问题 - Max 部分 goroutine 编号
    在 Go 面试中,有时会让应聘者措手不及的一个问题是“可以生成的 goroutine 的最大数量”。答案并不像说出一个具体数字那么简单。相反,面试官通常使用这个问题来评估您对 Go 并发模型、内存管理以及 goroutine 实践经验的理解。 以下是有效回答此问题的简明指南: 理解G...
    编程 发布于2024-11-15
  • 除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为 bool 的主要场景:语句:if、w...
    编程 发布于2024-11-15
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-11-15
  • 如何在 PHP 的 foreach 循环中访问元素的索引?
    如何在 PHP 的 foreach 循环中访问元素的索引?
    确定 foreach 索引foreach 循环提供了一种迭代数组的便捷方法,但显示每个元素的索引可以是挑战。与传统的 for 循环不同,似乎无法直接访问索引变量。使用 For 循环在 for 循环中,可以显式递增索引,如下所示:for ($i = 0; $i < 10; $i) { ...
    编程 发布于2024-11-15
  • 如何防止 Goroutine 中 HTTP 请求超时后继续?
    如何防止 Goroutine 中 HTTP 请求超时后继续?
    Goroutine Timeout提供的函数 Find() 使用 goroutine 发出一系列 HTTP 请求并处理它们的响应。然而,令人担忧的是,即使这些请求超过了指定的超时时间,这些请求也会在后台继续运行。潜在的 Goroutine 泄漏不太可能存在 Goroutine 泄漏代码。当Find(...
    编程 发布于2024-11-15
  • 如何在 PHP 中从数组中检索对象属性列?
    如何在 PHP 中从数组中检索对象属性列?
    从数组中检索对象属性列在应用程序中,通常需要从对象列表中提取特定属性。这个任务可以在 PHP 中高效完成,特别是在较新的语言版本中。使用 array_column() 提取属性PHP 7.0 及更高版本引入了 array_column() 函数,专为此目的而设计。要提取一列属性值,只需将 cats ...
    编程 发布于2024-11-15
  • 私有数据成员与公共变量:什么时候应该使用 Getter 和 Setter?
    私有数据成员与公共变量:什么时候应该使用 Getter 和 Setter?
    通过访问控制平衡私有数据成员在面向对象编程中,使用私有数据成员与公共 getter 和 setter 与使用私有数据成员与公共 getter 和 setter 之间的争论使所有变量公开仍然是一个讨论的话题。私有数据成员和访问控制私有数据成员的主要目的是强制封装和数据抽象,确保数据完整性和访问控制。通...
    编程 发布于2024-11-15
  • Gdevelop o 代码游戏引擎功能。
    Gdevelop o 代码游戏引擎功能。
    如果你的项目规模不是那么大,现在的游戏开发变得很容易。 我使用 Unity 游戏引擎来开发游戏,但我厌倦了为脚本文件编写或生成代码。 我了解了 Gdevelop 5 游戏引擎。它需要零编码,但需要一点点物理和数学知识。 您可以通过拖放游戏对象来创建游戏。 最佳功能: 只需设计精灵和行为 平台的平台行...
    编程 发布于2024-11-15

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

Copyright© 2022 湘ICP备2022001581号-3