<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
由於通過React.createElement()方法建立的React元素程式碼比較繁瑣,結構不直觀,無法一眼看出描述的結構,不優雅,開發時寫程式碼很不友好。
React使用JSX來替代常規的JavaScript,JSX可以理解為的JavaScript語法擴充套件,它裡面的標籤申明要符合XML規範要求。
開始本文正文,下面看下React中的JSX { }的使用,具體內容如下所示:
在做react開發的時候,我們知道最後要通過render方法來將React元素掛載到真實的DOM上。而建立一個React元素,可以通過兩種方式建立。
(1)通過JSX方式
(2)通過React.createElement()方法建立
而JSX的方式,最終也會被babel轉換,變成通過React.createElement()方法進行建立。
之所以這樣子,是因為JSX能夠很大程度的方便開發,可以少寫很多程式碼。
而本篇文章就是講解一下如何在React中使用JSX。
例如當我們通過JSX建立一個React元素:
let a = 1 const div = <div></div>
而在這個div中想使用變數a,我們就可以通過{}來對變數進行引入。
(1)引入變數
const div = <div>{a}</div> //變數
當然,除了引入變數這種,還有很多中方式可以在{}中進行編寫。
(2)引入物件屬性
let empty = { a: 1, b: 2 } const div = <div>{empty.a}</div> //物件屬性
(3)引入計算表示式
const div = <div>{empty.a + empty.b}</div> //計算表示式
(4)引入函數
const fn = ()=>{ return 2 } const div = <div>{fn()}</div> //函數
(5)引入邏輯表示式
const div = <div>{fn() === 2 ? 1 : 2}</div> //邏輯表示式
(6)引入陣列
const div = <div>{[1,2,3,4,5]}</div> //陣列
OK,除了上面寫在大括號裡的,還有幾種資料型別沒有引入。這裡需要注意,大括號裡雖然可以解析陣列,但是不能解析物件(有一種特例後面會說)。
如果在大括號裡面放入了物件,那麼React就會報錯。
同樣的,如果在大括號裡的是一個方法,也會報錯(也有一種特例)。
如果在{}裡面,引入了布林型別,undefined,null這三種資料型別。React雖然不會報錯,但是並不會渲染到真實DOM上。
在正常的HTML裡面,標籤是可以任意巢狀的。如果在React中,可以看下面的程式碼:
class Em extends React.Component { render(){ return <div></div> } } const div = (<div> <Em> <p>123</p> </Em> </div>)
通過上面的方式,是沒辦法實現出想要的效果的。因為它不符合JSX的使用規範,對於Em元件,是沒有收到p標籤的,所以也不會對它進行展示。
正確寫法如下:
class Em extends React.Component { render(){ return <div>{this.props.children}</div> } } const div = (<div> <Em> <p>123</p> </Em> </div>)
這種方式,主要是通過props.children拿到了P標籤,並且在Em元件裡面渲染。
說到這裡,可以說一下另一個用到{}的地方,當我們給React元件繫結屬性的時候,可以通過…的方式:
let props = { a:1,b:2} const div = <div {...props}>123</div>
請記住,這裡的{…props}和Es6的解構並不是一回事!
也就是這種寫法只能出現在JSX裡面,不能在HTML裡面這麼寫。因為在這裡babel已經對它進行了處理所以才可以這麼寫。
剛才說{}裡面不應該有物件和函數,但是有個別的特例,就是style樣式,和事件處理。
在JSX中給標籤新增樣式是這麼寫的:
const div = <div style={{fontSize:'14px',aaa:'2'}}></div>
也就是{}裡面的,是該標籤的樣式物件。值得注意的是裡面的key都是用小駝峰命名的。而且必須有效,不然是無法渲染到真實DOM的標籤上的。
在JSX中給標籤新增事件是這麼寫的:
const div = <div onClick={() => {console.log(123)}}>123</div>
同樣,事件名也是小駝峰式命名的。
在jsx中是可以通過語句來對React元素進行處理的。例如
條件判斷語句:
let div = [<div>123</div>]; if(1+1 === 2){ div.push(<div>true</div>) }else{ div.push(<div>false</div>) }
迴圈語句:
let div = [1,2,3,4,5].map((item,index) => { return <li key={index}>{item}</li> })
關於JSX的一些使用就先說這麼多,後續有新內容會繼續補充。
到此這篇關於React中的JSX { }的使用的文章就介紹到這了,更多相關React JSX使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45