」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > React 元件的大圖

React 元件的大圖

發佈於2024-11-03
瀏覽:813

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]刪除
最新教學 更多>
  • 為什麼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-07-04
  • 表單刷新後如何防止重複提交?
    表單刷新後如何防止重複提交?
    在Web開發中預防重複提交 在表格提交後刷新頁面時,遇到重複提交的問題是常見的。要解決這個問題,請考慮以下方法: 想像一下具有這樣的代碼段,看起來像這樣的代碼段:)){ //數據庫操作... 迴聲“操作完成”; 死(); } ? > ...
    程式設計 發佈於2025-07-04
  • 解決Spring Security 4.1及以上版本CORS問題指南
    解決Spring Security 4.1及以上版本CORS問題指南
    彈簧安全性cors filter:故障排除常見問題 在將Spring Security集成到現有項目中時,您可能會遇到與CORS相關的錯誤,如果像“訪問Control-allo-allow-Origin”之類的標頭,則無法設置在響應中。為了解決此問題,您可以實現自定義過濾器,例如代碼段中的MyFi...
    程式設計 發佈於2025-07-04
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。 This article aims to address the following:Problem StatementHow can we implement custom events...
    程式設計 發佈於2025-07-04
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-07-04
  • 對象擬合: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-07-04
  • 如何簡化PHP中的JSON解析以獲取多維陣列?
    如何簡化PHP中的JSON解析以獲取多維陣列?
    php 試圖在PHP中解析JSON數據的JSON可能具有挑戰性,尤其是在處理多維數組時。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    程式設計 發佈於2025-07-04
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-07-04
  • Python環境變量的訪問與管理方法
    Python環境變量的訪問與管理方法
    Accessing Environment Variables in PythonTo access environment variables in Python, utilize the os.environ object, which represents a mapping of envir...
    程式設計 發佈於2025-07-04
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-07-04
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-07-04
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在Java中的多個返回類型:一種誤解類型:在Java編程中揭示,在Java編程中,Peculiar方法簽名可能會出現,可能會出現,使開發人員陷入困境,使開發人員陷入困境。 getResult(string s); ,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但這確實是如此嗎...
    程式設計 發佈於2025-07-04
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-07-04
  • 使用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-07-04
  • 如何使用Python有效地以相反順序讀取大型文件?
    如何使用Python有效地以相反順序讀取大型文件?
    在python 中,如果您使用一個大文件,並且需要從最後一行讀取其內容,則在第一行到第一行,Python的內置功能可能不合適。這是解決此任務的有效解決方案:反向行讀取器生成器 == ord('\ n'): 緩衝區=緩衝區[:-1] ...
    程式設計 發佈於2025-07-04

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3