React JSX語法

JSX是什么?

JSX(JavaScript XML),React定義的一種類似XML的JS擴展語法。
JSX是React生成虛擬DOM得一種js擴展語法

在使用JSX定義虛擬DOM時不可使用引號
const VDOM = (
    <h2 id="id">
        <span>hello JSX</span>
    </h2>
)
JSX中混入不確定屬性或者表達式需要使用{ }
const myId = 'myId'
const myData = 'myData'
const VDOM = (
    <h2 id={myId.toLocaleLowerCase()}>
        <span>{myData.toLocaleLowerCase()}</span>
    </h2>
)
image.png
樣式類名指定需用className

class為ES6中定義類的關鍵詞,為規(guī)避所以React中用className來代替

const myId = 'myId'
const myData = 'myData'
const VDOM = (
    <h2 className="title" id={myId.toLocaleLowerCase()}>
        <span>{myData.toLocaleLowerCase()}</span>
    </h2>
)
image.png
內聯樣式需使用style={{key:value}}來定義

多單詞屬性需使用小駝峰寫法

const VDOM = (
    <h2 className="title" id={myId.toLocaleLowerCase()}>
        <span style={{color:'white',fontSize:'55px'}}>{myData.toLocaleLowerCase()}</span>
    </h2>
)
image.png
虛擬DOM只有一個根標簽
const myId = 'myId'
const myData = 'myData'
const VDOM = (
    <div>
        <h2 className="title" id={myId.toLocaleLowerCase()}>
            <span style={{color:'white',fontSize:'20px'}}>{myData.toLocaleLowerCase()}</span>
        </h2>
        <input type="text"/>
    </div>
)
JSX標簽必須閉合

非成對標簽可自閉合<input type="text"/>也可以<input type="text"></input>

const myId = 'myId'
const myData = 'myData'
const VDOM = (
    <div>
        <h2 className="title" id={myId.toLocaleLowerCase()}>
            <span style={{color:'white',fontSize:'20px'}}>{myData.toLocaleLowerCase()}</span>
        </h2>
        <input type="text"/>
    </div>
)
image.png
標簽首字母

1.若小寫字母開頭,則轉為html中同名元素,若html無該同名元素則報錯。
2.若大寫字母開頭,則渲染對應組件,若組件沒有定義則報錯。

const myId = 'myId'
const myData = 'myData'
const VDOM = (
    <div>
        <h2 className="title" id={myId.toLocaleLowerCase()}>
            <span style={{color:'white',fontSize:'20px'}}>{myData.toLocaleLowerCase()}</span>
        </h2>
        <input type="text"/>
        <Good>組件</Good>
    </div>
)
基本規(guī)則概括

1.遇到 <開頭的代碼, 以標簽的語法解析: html同名標簽轉換為html同名元素, 其它標簽需要特別解析
2.遇到以 { 開頭的代碼,以JS語法解析: 標簽中的js表達式必須用{ }包含

總結實例
<!doctype html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>jsx小練習</title>
</head>
<style>
    .title {
        background-color: red;
        width: 200px;
        height: 200px;
    }
</style>
<body>
<!--創(chuàng)建"容器"-->
<div id="test">

</div>
<!--引入react核心庫-->
<script type="text/javascript" src="../js/react.development.js"></script>
<!--引入react-dom,用于支持react操作DOM-->
<script type="text/javascript" src="../js/react-dom.development.js"></script>
<!--引入babel,用于將jsx轉js-->
<script type="text/javascript" src="../js/babel.min.js"></script>
<script type="text/babel">
//模擬數據
const data = ['張三', '李四', '王五']
//創(chuàng)建虛擬DOM
const VDOM = (
    <div>
        <h1>好友有列表</h1>
        <ul>
            {
                data.map((item,index)=>{
                    return <li key={index}>{item}</li>
                })
            }
        </ul>
    </div>
)
//渲染
ReactDOM.render(VDOM,document.getElementById('test'))
</script>
</body>
</html
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容