JSX、TSX 整體理解

来源:https://www.cnblogs.com/hubert-style/archive/2023/11/18/17839535.html
-Advertisement-
Play Games

可以少去理解一些不必要的概念,而多去思考為什麼會有這樣的東西,它解決了什麼問題,或者它的運行機制是什麼? JS JavaScript 是互聯網上最流行的腳本語言,這門語言可用於 HTML 和 web,更可廣泛用於伺服器、PC、筆記本電腦、平板電腦和智能手機等設備。 https://www.runoo ...


可以少去理解一些不必要的概念,而多去思考為什麼會有這樣的東西,它解決了什麼問題,或者它的運行機制是什麼?

JS

JavaScript 是互聯網上最流行的腳本語言,這門語言可用於 HTML 和 web,更可廣泛用於伺服器、PC、筆記本電腦、平板電腦和智能手機等設備。

https://www.runoob.com/js/js-intro.html

JSX

1. 什麼是 JSX

下麵我們看一段代碼:

class HelloMessage extends React.Component {
  render() {
    return <div>Hello {this.props.name}</div>;
  }
}

JSX 是一種 JavaScript 的語法擴展,運用於 React 架構中,可以讓你在 JavaScript 文件中書寫類似 HTML 的標簽。再通過翻譯器轉換到純 JavaScript 後由瀏覽器執行,在實際開發中,JSX 在產品打包階段都已經編譯成純 Javascript,不會帶來任何副作用,反而會讓代碼更加直觀並易於維護。

JSX 允許你在 JavaScript 中編寫類似 HTML 的標簽,從而使渲染的邏輯和內容可以寫在一起。有時候,你可能想要在標簽中添加一些 JavaScript 邏輯或者引用動態的屬性。這種情況下,你可以在 JSX 的大括弧內來編寫 JavaScript。

元素是構成 React 應用的最小單位,JSX 就是用來聲明 React 當中的元素,React 使用 JSX 來描述用戶界面。

可以通過以下兩個方面瞭解 JSX:

  • 擴展混合:JSX 是一種 JS 擴展的表達式,混合使用 Javascript 和類 html 來編寫代碼。
  • 混合支持:支持樣式、邏輯表達式和事件的統一混合實現。

2. JSX 編譯之 Babel 編譯器

JSX 編譯過程由 Babel 編譯器實現。所謂的 JSX 其實就是 Javascript 對象加 XML,所以使用 React 和 JSX 的時候一定要經過編譯的過程:Bable 將 JSX 編譯成 JavaScript 對象,然後通過 ReactDom.render() 構造 DOM 元素保持隨時頁面更新。

// JSX 代碼
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<div>Babel 編譯器</div>);

// JSX 編譯後
const root = ReactDOM.createRoot(document.getElementById("root"))
root.render(React.createElement("div",{id: "babel", className: "babel"}, "Babel 編譯器1"))

3. 為什麼使用 JSX?

React 認為渲染邏輯本質上與其他 UI 邏輯內在耦合,比如,在 UI 中需要綁定處理事件、在某些時刻狀態發生變化時需要通知到 UI,以及需要在 UI 中展示準備好的數據。

React 並沒有採用將標記與邏輯分離到不同文件這種人為的分離方式,而是通過將二者共同存放在稱之為“組件”的鬆散耦合單元之中,來實現關註點分離。我們將在後面章節中深入學習組件。如果你還沒有適應在 JS 中使用標記語言,這個會議討論應該可以說服你。

React 不強制要求使用 JSX,但是大多數人發現,在 JavaScript 代碼中將 JSX 和 UI 放在一起時,會在視覺上有輔助作用。它還可以使 React 顯示更多有用的錯誤和警告消息。

4. JSX 官方文檔

官網:https://zh-hans.react.dev/learn/writing-markup-with-jsx

TypeScript

TypeScript 是 JavaScript 的一個超集,支持 ECMAScript 6 標準。TypeScript 設計目標是開發大型應用,它可以編譯成純 JavaScript,編譯出來的 JavaScript 可以運行在任何瀏覽器上。

TypeScript 特點:

1)TypeScript 的定位是靜態類型語言,在寫代碼(編譯)階段就能檢查錯誤,而非運行階段(動態語言邊解析邊執行)。

2)類型系統是最好的文檔,增加了代碼的可讀性和可維護性。

3)強類型、類型推斷。

4)有一定的學習成本,需要理解介面 (Interfaces)、泛型 (Generics)、類 (Classes)等。

5)介面:介面是一系列抽象方法的聲明,是一些方法特征的集合,這些方法都應該是抽象的,需要由具體的類去實現,然後第三方就可以通過這組抽象方法調用,讓具體的類執行具體的方法。即介面也是一種規範,用來描述、約束對象、函數、類的形狀的,即規範類等裡面必須實現哪些方法。

6)TS 最後也是編譯為 JS,運行在任何瀏覽器上。

語法學習:

https://www.runoob.com/typescript/ts-tutorial.html

TSX

TSX 表明是 Typescript 文件並使用了 JSX 語法,JSX 語法參考上面提到的 JSX 詳解。最後提供一個別人寫的文章幫助理解。

https://zhuanlan.zhihu.com/p/435385184


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引言 上一篇中 WPF 重寫DataGrid樣式,因新產品UI需要,重寫了一下微軟 WPF 原生的 DataGrid 的樣式,包含如下內容: 基礎設置,一些基本背景色,字體顏色等。 滾動條樣式。 實現圓角表格,重寫表格的一些基礎樣式,例如 CellStyle ,RowStyle,RowHeaderS ...
  • 什麼是主構造函數 把參數添加到class與record的類聲明中就是主構造函數。例如 class Person(string name) { private string _name = name; } 這種寫法與以下代碼寫法一樣 class Person { private string _nam ...
  • 背景 工作需要對接內部的日誌中台,對日誌列印有固定的格式要求,為了使Nginx的access日誌也能被採集,需要對日誌格式進行自定義,要求日誌格式為: yyyy-MM-dd HH:mm:ss.SSS LOG_LEVEL LOG_MSG > 時間格式+列印級別+業務日誌 如: 23-11-18 17: ...
  • 作為小白的我這幾天買了個香橙派3b 經過這幾天的折騰,終於進入了ssh終端(大喜 我買的是官店的8G,創客價299,連著一起買了一個閃迪的64gTF卡 簡單總結一下搭建過程: 物理準備:一臺電腦,香橙派與一張16G以上的tf卡,tf讀卡器(一般會送)一根網線,type-c線 第一步:燒錄ubuntu ...
  • CycloneIII內部資源概述 目錄CycloneIII內部資源概述Logic Elements and Logic Array Blocks(邏輯元件和邏輯陣列塊)LELABLAB InterconnectsMemory Blocks(記憶體塊)Memory modeClocking modeEm ...
  • DM8壓縮表 0、結論 行表(普通表)不支持壓縮。但是語法支持。建表之後,查詢到的占用空間會比普通表小一半。 經過測試,裝10萬數據(兩個欄位),壓縮的、未壓縮,占用空間一樣大。 列表(huge表)支持壓縮。可以壓縮表(就是壓縮所有列),也可以選擇壓縮列。但是建表的時候就要設置,否則建好表之後修改不 ...
  • 本文介紹MySQL和PostgreSQL的一些特性對比,讓大家瞭解二者的優劣,更好的做出選擇。當前國內的現狀,互聯網公司使用MySQL的較多,PostgreSQL的使用比例反而不高,但相信看到PG的新特性後,你會愛上她。當然MySQL作為最流行的資料庫,依然會吸引大部分人的眼球。 PostgreSQ ...
  • 原文:Android Material組件庫(日期選擇和時間選擇器)基本使用 - Stars-One的雜貨小窩 簡單的封裝下Material組件里的日期選擇器和時間選擇器的使用方法 效果 代碼 需要添加Material組件庫的依賴(不過後面新版本Android Studio創建的新項目都會有此依賴了 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...