React學(xué)習(xí)之JSX與react事件實(shí)例分析
本文實(shí)例講述了React學(xué)習(xí)之JSX與react事件。分享給大家供大家參考,具體如下:
1、JSX
1.1、表達(dá)式
在React中使用JSX來描述HTML頁面,而且可以與js混合使用,使用JavaScript表達(dá)式時(shí)要將表達(dá)式包含在大括號里
const user = { firstName: 'Harper', lastName: 'Perez' }; const element = ( //將JSX語句保存在變量中 <h1> Hello, {formatName(user)}! {/* {}中寫js語句*/} </h1> );
在編譯之后呢,JSX 其實(shí)會被轉(zhuǎn)化為普通的 JavaScript 對象,可以對其賦值或把它當(dāng)作參數(shù)傳遞:
ReactDOM.render( element, //通過JSX變量渲染react節(jié)點(diǎn) document.getElementById('root') );
1.2、屬性
JSX中可以像HTML中一樣使用"字符串"的屬性,也可以使用{表達(dá)式}屬性:
const element = <div tabIndex="0"></div>; const element = <img src={user.avatarUrl}></img>;
注意:
1、React DOM 使用 camelCase 小駝峰命名 來定義屬性的名稱,而不是使用 HTML 的屬性名稱。例如font-size要改為fontSize。
2、HTML中的保留字不能用于js中,例如class,應(yīng)改為className:
const ele= <div className="red">Red Color</div>
3、JSX中行內(nèi)樣式style需要用一個(gè)對象返回,而不是字符串:
const ele=<div style="color:red">Red</div> //會報(bào)錯(cuò) const ele= <div style={{color:'red'}}>Red</div>
{{color:red}}中第一個(gè)大括號代表這是一個(gè)js表達(dá)式,第二個(gè)代表這是一個(gè)用大括號引起的對象
1.3、嵌套
如果 JSX 標(biāo)簽是閉合式的,那么需要在結(jié)尾處用 />:
const element = <img src={user.avatarUrl} />;
jJSX內(nèi)含多個(gè)標(biāo)簽時(shí),返回時(shí)需要在最外面用一個(gè)div把它們包起來:
const element = ( <div> <h1>Hello!</h1> <h2>Good to see you here.</h2> </div> );
1.4、注釋
在jsx中的注釋要單獨(dú)占一行,且用大括號包起來,例如:{/*注釋*/},否則有可能會被當(dāng)成普通文本,引起錯(cuò)誤。
2、事件
react事件的綁定采用駝峰寫法onClick={this.function}
例如定義一個(gè)切換ON/OFF的函數(shù)shiftFlag:
class Toggole extends React.Component{ constructor(props){ super(props); this.state={ flag:true }; this.shiftFlag=this.shiftFlag.bind(this); //函數(shù)shiftFlag綁定this } shiftFlag(e){ e.preventDefault(); this.setState({ flag:!this.state.flag }); } render(){ return <a href="#" rel="external nofollow" onClick={this.shiftFlag}>{this.state.flag?'ON':'OFF'}</a> } }
注:
1、類的方法默認(rèn)是不會綁定this的,直接在方法shiftFlag中使用this會報(bào)錯(cuò)this is undefined,因此需要為shiftFlag綁定this。
2、e是一個(gè)事件參數(shù),使用e.preventDefault()方法來阻止a標(biāo)簽的默認(rèn)跳轉(zhuǎn)行為。
react事件參數(shù)的傳遞通過綁定來實(shí)現(xiàn),在傳遞時(shí),綁定的this在前,參數(shù)在后。在定義函數(shù)時(shí),事件對象e要放在最后,例如定義一個(gè)setName函數(shù)修改name為傳入的參數(shù):
class Name extends React.Component{ constructor(props){ super(props); this.state={ name:'default' } } setName(name,e){ //事件e放在最后 this.setState({ name:name }) } render(){ return <button onClick={this.setName.bind(this,'tory')}>{this.state.name}</button> } }
希望本文所述對大家React程序設(shè)計(jì)有所幫助。
相關(guān)文章
React實(shí)現(xiàn)控制減少useContext導(dǎo)致非必要的渲染詳解
這篇文章主要介紹了React如何有效減少使用useContext導(dǎo)致的不必要渲染,使用useContext在改變一個(gè)數(shù)據(jù)時(shí),是通過自己逐級查找對比改變的數(shù)據(jù)然后渲染,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11全棧輕量級搭配之Remix Prisma Sqlite使用分析
這篇文章主要為大家介紹了全棧輕量級搭配之Remix Prisma Sqlite使用示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05react項(xiàng)目打包后點(diǎn)擊index.html頁面出現(xiàn)空白的問題
這篇文章主要介紹了react項(xiàng)目打包后點(diǎn)擊index.html頁面出現(xiàn)空白的問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06react native實(shí)現(xiàn)往服務(wù)器上傳網(wǎng)絡(luò)圖片的實(shí)例
下面小編就為大家?guī)硪黄猺eact native實(shí)現(xiàn)往服務(wù)器上傳網(wǎng)絡(luò)圖片的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08react事件對象無法獲取offsetLeft,offsetTop,X,Y等元素問題及解決
這篇文章主要介紹了react事件對象無法獲取offsetLeft,offsetTop,X,Y等元素問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。2022-08-08React報(bào)錯(cuò)map()?is?not?a?function詳析
這篇文章主要介紹了React報(bào)錯(cuò)map()?is?not?a?function詳析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08Redis數(shù)據(jù)結(jié)構(gòu)面試高頻問題解析
這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)高頻面試問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06