成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

React核心成員表示:JSX就是個錯誤

開發 前端
JSX最早由Facebook提出并推廣,在React中被廣泛用來描述視圖狀態。JSX作為JS語法糖,可以用JS語法靈活的描述視圖狀態。

[[401115]]

 近日,在一場關于JSX的討論中,React核心成員「Sebastian Markbåge」(Hooks作者)表示:

他更推崇SwiftUI語法,并認為JSX就是個錯誤。

JSX最早由Facebook提出并推廣,在React中被廣泛用來描述視圖狀態。

作為一種類XML的JS語法糖,JSX同時兼顧了兩個優點:

XML對樹狀結構優秀的表現力

不管是「嵌套」還是「屬性」,JSX都能很自然的描述。

我們可以很容易從如下JSX結構推導出實際視圖效果:

  1. <div style={{color: '#f00'}}> 
  2.   i am <span>Ka Song</span> 
  3. </div> 

 JS在運行時的靈活

曾有人說:

  • JSX就是擁有超能力的HTML

這里的超能力指:JSX作為JS語法糖,可以用JS語法靈活的描述視圖狀態。

  1. function App({children}) { 
  2.   return ( 
  3.     <div> 
  4.       {children || 'i am empty'
  5.     </div> 
  6.   ) 

 作為對比,Vue模版語法的表現力就差很多。

然而,吾之蜜糖彼之砒霜:

受JS語法限制的XML

比如class屬于JS語法keyword,而class在HTML中代表「類名」。

所以當JSX使用className作為「類名」的props時難免讓人困惑。

  1. <div className="container"></div> 

 依賴編譯

JSX需要先編譯為JS才能在宿主環境執行,所以使用JSX描述視圖的框架(比如React)都需要依賴編譯工具。

這增加了項目環境配置的復雜度。

DSL哪家強?

到這里我們可以發現,衡量一門DSL(領域相關語言)優劣的標準有三點:

  • 是否能直觀描述視圖狀態
  • 是否有靈活的編程能力
  • 原生支持還是需要編譯

讓我們按這三個維度權衡幾種不同平臺的DSL:

HTML

視圖描述能力:🌟🌟🌟

編程能力:🌟

不需要編譯:🌟

HTML描述視圖能力最強(因為與DOM節點一一對應),但是缺乏編程能力。

Pug、Vue、JSX

視圖描述能力:🌟🌟🌟

編程能力:🌟🌟~🌟🌟🌟

[[401116]]

都是在XML基礎上演進的語法糖,擁有強大的描述視圖能力。

他們的區別在于「編程能力」與「模版語法」的束縛之間取舍。

Flutter

視圖描述能力:🌟

編程能力:🌟🌟🌟🌟

使用函數調用的方式描述視圖,編程能力很強。

但是在描述嵌套的組件樹結構時,函數調用不如XML描述能力強。

比如如下HTML結構:

  1. <div> 
  2.   <p>Hello</p> 
  3.   <p>I am</p> 
  4.   <p>Ka Song</p> 
  5. </div> 

 用Flutter語法描述:

  1. Stack( 
  2.   children: <Widget>[ 
  3.      Text("Hello"), 
  4.      Text("I am"), 
  5.      Text("Ka Song"
  6.    ], 

SwiftUI與React

SwiftUI作為被蘋果寄予厚望、意圖統領IOS全平臺的DSL。

在保證強大的編程能力同時,也希望在視圖表現力方面做的更好。

接下來我們通過一個簡單的「點擊加一」的計數器來對比React與SwiftUI語法:

React使用class語法:

  1. class Counter extends React.Component { 
  2.   state = { 
  3.     counter: 0 
  4.   } 
  5.   increment: () => { 
  6.     const {counter} = this.state; 
  7.     this.setState({counter: counter + 1}) 
  8.   } 
  9.   render() { 
  10.     const {counter} = this.state; 
  11.     return ( 
  12.       <> 
  13.         <p>數字:{counter}</p> 
  14.         <button onClick={this.increment}>點我加一</button> 
  15.       </> 
  16.     ) 
  17.   } 

 SwiftUI:

  1. struct Counter : View { 
  2.     @State var counter = 0 
  3.  
  4.     func increment () { 
  5.         counter += 1 
  6.     } 
  7.  
  8.     var body: some View { 
  9.         VStack { 
  10.             Text("數字: \(counter)"
  11.             Button(action: increment) { 
  12.                 Text("點我加一"
  13.             } 
  14.         } 
  15.     } 

可以看到,拋開語法差異,兩個框架的寫法是很類似的。

同時,SwiftUI憑借強大的編程能力,原生實現React當前并不支持的功能:

比如,在React中,子組件要改變父組件的狀態,需要父組件將「狀態」與「改變狀態的方法」傳遞給子組件。

子組件調用「改變狀態的方法」通知父組件狀態變化,父組件再傳遞變化后的「狀態」給子組件。

這種方式在React中被稱為「受控組件」。

在SwiftUI中,子組件只需要將父組件傳遞的狀態申明為@Binding,就能達到與父組件該狀態「雙向綁定」的效果。

比如上例的counter:

  1. // 從 
  2. @State var counter = 0 
  3. // 變為 
  4. @Binding var counter 

則計數器接受父組件傳遞的counter狀態,子組件counter狀態改變后會作用于父組件counter狀態。

你更喜歡哪種DSL

從2013年5月29日React誕生到現在。

經過8年的教育,大部分React開發者已經接受JSX。

但是,這期間也不斷有人提出JSX的替代方案。

比如react-hyperscript。

隨著SwiftUI熱度提升,更是有人提出用其替代React中的JSX:

也有人做出模型experimental-react-like-framework

你喜歡JSX么?你覺得未來他會被誰取代?或者他會取代誰?

 

責任編輯:姜華 來源: 魔術師卡頌
相關推薦

2023-07-22 00:33:07

React團隊數據

2012-05-23 10:08:30

JRubyJava紅帽

2019-10-30 11:07:11

區塊鏈FacebookLibra

2021-11-05 12:38:02

勒索組織勒索軟件攻擊

2013-12-03 18:35:25

華為TPC大數據

2020-10-12 10:06:26

技術React代數

2023-05-30 11:27:09

Rust自然語言代碼

2018-11-05 09:47:18

新華三

2023-02-03 08:36:35

2016-01-15 10:11:39

2021-10-29 09:46:01

REvil勒索軟件網絡攻擊

2025-06-09 08:48:00

2024-02-19 13:10:02

AI模型

2023-06-15 06:57:06

Strve.jsVite

2025-02-19 10:36:01

2025-03-03 00:00:03

2021-10-08 15:27:50

微軟小冰人工智能

2021-05-21 09:34:40

React React 17前端

2024-01-26 08:06:43

2021-09-14 18:33:39

React 數據交互
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文一区二区 | 中文字幕在线观看 | 第一色在线 | 午夜天堂精品久久久久 | 日韩一区二区免费视频 | 搞av.com| 久久精品国产99国产精品 | 免费成人在线网站 | 玖玖爱365 | 精品国产欧美一区二区三区成人 | 九七午夜剧场福利写真 | 毛片链接 | 日韩有码一区 | 网站黄色在线免费观看 | 黄色在线免费观看 | 欧美二区在线 | 性一区| 亚洲福利在线观看 | 中文字幕免费在线 | 在线成人免费视频 | 精品三级在线观看 | 日韩免费福利视频 | 奇米视频777 | 91麻豆精品国产91久久久更新资源速度超快 | 久久久精品一区 | 欧美精品区| 日韩激情在线 | www免费视频 | 国产精品特级毛片一区二区三区 | 欧美成人一区二免费视频软件 | 日韩在线精品视频 | 欧美a在线 | 亚洲福利在线观看 | 蜜桃一区二区三区 | 精品国产18久久久久久二百 | 欧美日韩在线一区二区三区 | 久久精品国产亚洲一区二区 | 国产在线一区二区三区 | 国产一区二区久久 | 国产精品毛片一区二区三区 | 国产美女自拍视频 |