摘要:今天我們來看一種優雅的編寫的代碼的一種方式。有了之后,可以幫助我們在編寫模板的時候結構更加簡單清晰。以上是筆者歸納總結,如有誤之處,歡迎指出。
往期回顧
前文中我們講解了利用 ReactElement 來編寫React程序,但是我們也看到這種方式編寫 React 特別的麻煩,而且層級結構特別不清晰。今天我們來看一種優雅的編寫React的代碼的一種方式 JSX。
JSX
JSX就是把 js 和 xml 結合起來編寫程序的一種格式,簡單的說就是給我們的 JS 添加了 XML 的語法擴展。有了 JSX 之后,可以幫助我們在編寫模板的時候結構更加簡單清晰。 我們可以對比一下,咱們使用 ReactElement 和 JSX 編寫同一個結構時的區別,大家就會喜歡上 JSX;
利用 ReactElement 編寫的結構
let Title = React.createElement("h1",null,"頁面標題"); let Header = React.createElement("header",null,Title); let Sider = React.createElement("aside",null,"側邊欄"); let Content = React.createElement("article",null,"頁面內容"); let Main = React.createElement("div",null,Sider,Content); let Footer = React.createElement("footer",null,"頁面底部"); let Page = React.createElement( "div", null, Header, Main, Footer); ReactDOM.render( Page, document.getElementById("root") );
利用 JSX 編寫的結構
ReactDOM.render(document.getElementById("root") );頁面標題
頁面內容
從上述示例中我們看到在 JSX 中我們可以直接使用我們熟悉的 HTML 標簽來書寫我們的模板,這樣的話結構層級非常清晰,也便于我們維護,當然上手也更便捷。
JSX 使用時的注意事項
在使用 JSX 中,不能嵌套多個同級標簽,一定要在外邊加一個父級
使用 JSX 時,我們需要使用 Babel 來進行編譯,所以必須引入 Babel 并且在 script 上 添加 type="text/babel" 來提示 babel 編譯我們 script 中的代碼,如下所示:
使用 JSX 時,當我們要寫的是一個 HTML 標簽時,請全部小寫
使用 JSX 時,所有標簽都必須閉合單標簽 <單標簽 /> 也一樣必須閉合
插值表達式
當我們需要在 JSX 中插入一個js數據時,我們就需要使用插值表達式。 在 JSX 中,讀到{} 時,它就會認為你要插入一條js數據,這個 {} 就是插值表達式,使用示例如下:
let a = "hello"; let b = "React"; ReactDOM.render({a + b}
, document.getElementById("root") );
插值表達式在什么時候使用
當我們需要在 JSX 中使用 JS 中的數據的時候,我們就需要使用差值表達式
當我們要在 JSX 中添加 注釋的時候,也需要使用插值表達式 {/ 在這里寫JSX的注釋 /}
使用插值表達式時的注意事項
{}中,接收一個 JS 表達式,可以是我們的算術表達式,變量 或函數調用, 最終 {} 接收的是表達式 計算的結果
{}中,接收的是 函數調用時,該函數需要由返回值
{}中,不能寫 if else 以及 switch 這些流程控制語句,但是可以使用三目表達式 來進行判斷,示例如下:
let a = 10; let b = 20; ReactDOM.render({a > b?"正確":"錯誤"}
, document.getElementById("root") );
{}中,不能寫 for 或者 whlie 這些循環語句,可以使用數組方法代替,示例如下:
let arr = [ "這是第一項", "這是第二項", "這是第三項" ] ReactDOM.render(
不同類型數據在插值表達式中的數據輸出
字符串、數字:原樣輸出
布爾值、空、未定義:輸出空值,也不會有錯誤
對象:不能直接輸出,但是可以通過其他方式,Object.values、Object.keys 等方法去解析對象
數組:支持直接輸出,默認情況下把數組通過空字符串進行拼接
JSX的屬性操作
屬性值加了引號,那么就是一個普通的屬性書寫方式
ReactDOM.render(React筆記
, document.getElementById("root") );
屬性值可以直接寫成差值表達式
let title = "React筆記" ReactDOM.render(React筆記
, document.getElementById("root") );
class:在 JSX 中需要使用 className 屬性去代替 class
ReactDOM.render(React筆記
, document.getElementById("root") );
style:在 JSX 中 style 的值只能是對象 style={{ property : value }}
let style = { borderBottom: "1px solid #000" } ReactDOM.render(React筆記
, document.getElementById("root") ); ReactDOM.render(React筆記
, document.getElementById("root") );
看完了 JSX 的基本操作之后,我們來看一個小例子,如何通過數據來生成一個簡單的視圖
let data = { title: "巔峰榜·熱歌", details: [ { name: "體面", message: "《前任3:再見前任》電影插曲" }, { name: "說散就散", message: "《前任3:再見前任》電影主題曲" }, { name: "BINGBIAN病變 (女聲版) ", message: "抖音熱門歌曲" } ] } ReactDOM.render(, document.getElementById("root") ); {data.title}
{data.details.map((item,index)=>{ return (
- ); })}
{item.name}
{item.message}
關于 JSX 的基本使用我們就說到這,在下一章節中我們要說到一個比較重的內容--組件。
當然在 React 中編寫組件的方式也會有多種,我們在下一篇中詳細的說。
——以上是筆者歸納總結,如有誤之處,歡迎指出。
訂閱號ID:Miaovclass
關注妙味訂閱號:“妙味前端”,為您帶來優質前端技術干貨;
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/98850.html
摘要:中組件可以將切分成一些的獨立的可復用的部件。組件的返回值是一個需要在也頁面上顯示的元素,也就是說中組件必須有返回值。 showImg(https://segmentfault.com/img/bVbjgxB?w=900&h=383); 上期回顧 前文我們講解了 React 模板 JSX,接著我們繼續來看看 React 組件又是如何工作的呢? 組件化開發到了今天已經是大家的共識,在 R...
摘要:是一套以技術搭建的項目模板,適用于移動端和開發。其中包含常用常用組件,精細計算的,以及諸多項目的實踐。 react-template-easily Desc: react-template-easily 是一套以react技術搭建的項目模板,適用于移動端H5, webapp和hybirdApp開發。其中包含常用20+常用組件,精細計算的rem,以及諸多項目的實踐。 URL: http...
摘要:是一套以技術搭建的項目模板,適用于移動端和開發。其中包含常用常用組件,精細計算的,以及諸多項目的實踐。 react-template-easily Desc: react-template-easily 是一套以react技術搭建的項目模板,適用于移動端H5, webapp和hybirdApp開發。其中包含常用20+常用組件,精細計算的rem,以及諸多項目的實踐。 URL: http...
摘要:但是隨著程序邏輯越來越復雜,業務邏輯代碼跟代碼混到一起就變得越來越難以維護,所以就有了開發模式。其實只是給加了點糖上面這種在中寫類似代碼的語法被稱為。你可以理解為擴展版的。尤其是對一些相對還比較流行的框架或技術,更是如此。 這是《玩轉 React》系列的第三篇,看到本篇的標題,了解過 React 的同學可能已經大致猜到我要講什么了,本篇中要講的內容對于剛接觸 React 的同學來說,可...
閱讀 3239·2021-09-07 10:10
閱讀 3584·2019-08-30 15:44
閱讀 2584·2019-08-30 15:44
閱讀 3003·2019-08-29 15:11
閱讀 2229·2019-08-28 18:26
閱讀 2750·2019-08-26 12:21
閱讀 1119·2019-08-23 16:12
閱讀 3034·2019-08-23 14:57