」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > React 的基本核心概念

React 的基本核心概念

發佈於2024-11-09
瀏覽:279

在快速发展的 Web 开发世界中,React 仍然是构建动态和高性能用户界面的基石。无论您是经验丰富的开发人员还是刚刚起步的开发人员,了解 React 的核心概念对于充分发挥其潜力至关重要。在本文中,我们将探讨 React 的基本原理,从它的库状态到 hooks 的强大功能,并为您提供增强 React 技能的清晰基础。让我们深入了解一下! ?

1. React 是框架还是库?

React 是一个 JavaScript 库,而不是一个框架。与提供一套全面的工具并强制执行构建应用程序的特定方式的框架不同,React 专注于一个特定的方面——UI 渲染。这使得 React 高度灵活和流行,因为它遵循 Unix 哲学,做一件事并做好它。

2.虚拟 DOM

DOM 代表文档对象模型,简单来说代表应用程序的 UI。每次我们更改 UI 时,DOM 都会更新以表示该更改。 DOM 表示为树形数据结构。当我们更改 UI 时,DOM 会重新渲染并更新其子项。 UI 的重新渲染使应用程序变慢。

对于此解决方案,我们使用虚拟 DOM。虚拟 DOM 只是 DOM 的虚拟表示。当应用程序的状态发生变化时,虚拟 DOM 而不是真实的 DOM 会被更新。

虚拟 DOM 每次都会创建一棵树,元素都表示为一个节点。如果任何元素发生变化,就会创建一个新的虚拟 DOM 树。然后将新树与前一树进行比较或“差异”

Fundamental Core Concepts of React

在此图中,红色圆圈代表已更改的节点。这些节点代表更改状态的 UI 元素。然后比较之前的树和当前改变的树。更新后的树然后批量更新到真实的 DOM。这使得 React 作为高性能 JavaScript 库脱颖而出。

总之:

  1. 整个虚拟 DOM 被更新。
  2. 虚拟 DOM 与更新之前的样子进行比较。 React 找出哪些对象发生了变化。
  3. 更改的对象,并且仅更改的对象,会在真实 DOM 上更新。
  4. 真实 DOM 的变化会导致屏幕发生变化。

3. JSX

JSX (JavaScript XML) 允许您在 React 中编写类似 HTML 的代码。它使用 React.createElement( component, props, …children) 函数将 HTML 标签转换为 React 元素。

例如:
JSX代码:


  Hello, Good Morning!

本例编译为:

React.createElement(
  MyText,
  { color: 'red' },
  'Hello, Good Morning!'
)

注意:用户定义的组件必须以大写字母开头。小写标签被视为 HTML 元素。

4. JSX 中的道具

在 JSX 中可以通过多种方式指定属性:

JavaScript 表达式作为 Props:


此处,props.sum 的计算结果为 6。

字符串文字:




上面的两个例子是等效的。

Props 默认为“True”
如果我们不传递 prop 的值,则默认为 true。

例如,




上面的两个例子是等效的。

5.类组件

React 中的组件可以定义为类或函数。以下是定义类组件的方法:

class Greetings extends React.Component {
  render() {
    return 

Hello, {this.props.name}

; } }

6。组件生命周期

组件具有生命周期方法,您可以重写这些方法以在特定阶段运行代码:

安装: 当组件被创建并插入到 DOM 中时。

  • 构造函数()
  • 使成为()
  • componentDidMount()

更新:当道具或状态改变时。

  • 使成为()
  • componentDidUpdate()

卸载:当组件从 DOM 中移除时。

  • componentWillUnmount()

7.类属性

defaultProps 允许您定义 props 的默认值:

class MyText extends React.Component {
  // Component code here
}

MyText.defaultProps = {
  color: 'gray'
};

如果没有提供 props.color,则默认为 'gray'。

8.道具类型

我们可以使用 prop-types 来检查组件传递的属性的类型。当它们不匹配时,它会给出错误。

import PropTypes from 'prop-types';

const studentPropTypes = {
  studentName: PropTypes.string,
  id: PropTypes.number
};

const props = {
  studentName: 'Asima',
  id: 'hi' // Invalid
};

PropTypes.checkPropTypes(studentPropTypes, props, 'prop', 'MyComponent');

这将警告 id 的类型不匹配。

9.优化性能

React 是为了性能而设计的,但你可以进一步优化它:

使用生产构建:

npm run build

这将创建一个经过优化的生产版本。

最小化源代码:谨慎对待 React 源代码的更改。

代码分割:将 JavaScript 代码捆绑成块以根据需要加载。

10.反应钩子

Hooks 是允许您在函数组件中使用状态和其他 React 功能的函数。两个最受欢迎的钩子是:

useState: 向功能组件添加状态。

function Example() {
  const [count, setCount] = useState(0);

  return (
    

You clicked {count} times

); }

useEffect: 管理函数组件中的副作用。

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  });

  return (
    

You clicked {count} times

); }

React 不断发展以满足现代 Web 开发的需求,掌握其核心概念对于构建高效、可扩展的应用程序至关重要。从理解 React 作为一个库如何脱颖而出,到利用功能组件的钩子的力量,这些基础知识将帮助您走上熟练 React 的道路。

当您继续在项目中探索和实施 React 时,请记住,及时了解最新的实践和功能将使您在不断变化的技术领域保持领先地位。如果您发现本文有价值,请不要忘记点赞并与渴望加深 React 知识的其他开发人员分享!

感谢您的阅读,祝您编码愉快! ?

版本聲明 本文轉載於:https://dev.to/asimachowdhury/fundamental-core-concepts-of-react-2lp3?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    在嘗試為JavaScript對象創建動態鍵時,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正確的方法採用方括號: jsobj ['key''i] ='example'1; 在JavaScript中,數組是一...
    程式設計 發佈於2025-03-28
  • 如何在鼠標單擊時編程選擇DIV中的所有文本?
    如何在鼠標單擊時編程選擇DIV中的所有文本?
    在鼠標上選擇div文本單擊帶有文本內容,用戶如何使用單個鼠標單擊單擊div中的整個文本?這允許用戶輕鬆拖放所選的文本或直接複製它。 在單個鼠標上單擊的div元素中選擇文本,您可以使用以下Javascript函數: function selecttext(canduterid){ if(d...
    程式設計 發佈於2025-03-28
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-03-28
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-03-28
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-03-28
  • 您如何在Laravel Blade模板中定義變量?
    您如何在Laravel Blade模板中定義變量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配變量對於存儲以後使用的數據至關重要。在使用“ {{}}”分配變量的同時,它可能並不總是最優雅的解決方案。 幸運的是,Blade通過@php Directive提供了更優雅的方法: $ old_section =...
    程式設計 發佈於2025-03-28
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-03-28
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-03-28
  • 大批
    大批
    [2 數組是對象,因此它們在JS中也具有方法。 切片(開始):在新數組中提取部分數組,而無需突變原始數組。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    程式設計 發佈於2025-03-28
  • 如何將多種用戶類型(學生,老師和管理員)重定向到Firebase應用中的各自活動?
    如何將多種用戶類型(學生,老師和管理員)重定向到Firebase應用中的各自活動?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    程式設計 發佈於2025-03-28
  • 您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    您可以使用CSS在Chrome和Firefox中染色控制台輸出嗎?
    在javascript console 中顯示顏色是可以使用chrome的控制台顯示彩色文本,例如紅色的redors,for for for for錯誤消息? 回答是的,可以使用CSS將顏色添加到Chrome和Firefox中的控制台顯示的消息(版本31或更高版本)中。要實現這一目標,請使用以下...
    程式設計 發佈於2025-03-28
  • 如何在無序集合中為元組實現通用哈希功能?
    如何在無序集合中為元組實現通用哈希功能?
    在未訂購的集合中的元素要糾正此問題,一種方法是手動為特定元組類型定義哈希函數,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    程式設計 發佈於2025-03-28
  • 如何在Java中執行命令提示命令,包括目錄更改,包括目錄更改?
    如何在Java中執行命令提示命令,包括目錄更改,包括目錄更改?
    在java 通過Java通過Java運行命令命令可能很具有挑戰性。儘管您可能會找到打開命令提示符的代碼段,但他們通常缺乏更改目錄並執行其他命令的能力。 solution:使用Java使用Java,使用processBuilder。這種方法允許您:啟動一個過程,然後將其標準錯誤重定向到其標準輸出...
    程式設計 發佈於2025-03-28
  • 如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    如何從PHP中的Unicode字符串中有效地產生對URL友好的sl。
    為有效的slug生成首先,該函數用指定的分隔符替換所有非字母或數字字符。此步驟可確保slug遵守URL慣例。隨後,它採用ICONV函數將文本簡化為us-ascii兼容格式,從而允許更廣泛的字符集合兼容性。 接下來,該函數使用正則表達式刪除了不需要的字符,例如特殊字符和空格。此步驟可確保slug僅包...
    程式設計 發佈於2025-03-28
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-03-28

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

Copyright© 2022 湘ICP备2022001581号-3