React學習——Day3

在React中啓用JSX語法

1. 淘汰React.createElement()寫法

如果採用React.createElement()創建虛擬DOM的方法來寫頁面,如果頁面上有成百上千個元素,而且元素之間有複雜的嵌套關係,這種寫法就太麻煩了。對於頁面UI元素來說,最簡單最有效的書寫形式就是寫HTML,因爲HTML是最優秀的標記語言。能不能像下面這樣來創建虛擬DOM元素呢?

const mydiv = <div id="mydiv">這是一個div元素</div>

答案是可以的。像這種在JS中混合寫入類似於HTML的語法,叫做JSX語法——符合XML規範的JS。但是在JS文件中,默認是不能寫這種類似於HTML的標記的。如果想讓以上寫法生效,需要用到babel來轉換這些JS中的標籤。

2. 引入babel

可以像下面這樣引入babel:

<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
<script type="text/babel">
	// 此區域可以寫JSX語法
</script>

注意:這種在瀏覽器中使用babel來編譯JSX的方式效率是非常低的,生產環境中不建議使用。
這裏我們用到的JSX語法的本質其實就是在運行的時候通過babel將JSX語法轉換成React.createElement()的API調用。JSX中的標籤我們可以把它看成是對象,因此它不像HTML那樣是直接放到瀏覽器上顯示的,是作爲JS對象最終通過ReactDOM.render()方法渲染到瀏覽器上的。

3. JSX語法注意事項

  • 在JSX語法中,要把JS代碼寫到{ }中。
  • JSX語法控制的區域寫註釋,也要把註釋寫到{ }中。 推薦{/* */}寫法。
  • 爲JSX中的元素添加class類名,需要使用className來替代class;htmlFor替換label標籤的for屬性。很明顯,這是爲了與JS關鍵字進行區分。
  • 在JSX創建DOM的時候,所有的節點,必須有唯一的根元素進行包裹。
  • 在JSX語法中,標籤必須成對出現,如果是單標籤,則必須自閉和!因爲XML規範要比HTML嚴格得多。

當編譯引擎在編譯JSX代碼的時候,如果遇到了<那麼就把它當作HTML代碼去編譯,如果遇到了{}就把花括號內部的代碼當作普通JS代碼去編譯。

4. 使用JSX語法

React03.html演示了JSX語法的具體用法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>React03</title>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
</head>
<body>
    <div id="app"></div>

    <script type="text/babel">
        let id = "myDiv";  // 爲屬性綁定值
        let num = 10;  // 渲染數字
        let str = '你好,中國';  // 渲染字符串
        let boo = true;  // 渲染布爾值
        const p = <p>哈哈哈</p>;  // 渲染JSX元素
        const arr = [           // 渲染JSX元素數組
            <h2>我是H2</h2>,
            <h3>我是H3</h3>
        ];
        const mydiv = <div id={id} title="this is a div" style={{color: "red", backgroundColor: "yellow"}}>
            這是div
            <h1>這是一個大大的H1</h1>
            {num + 2}
            <hr/>
            {str}
            {/* 這是註釋 */}
            <hr/>
            {boo.toString()}
            <hr/>
            {p}
            <hr/>
            {arr}
            <hr/>
            <p className="testClass">測試類名</p>
            <hr/>
            <label htmlFor="testFor">測試for屬性</label>
            <hr/>
        </div>;
        ReactDOM.render(
            mydiv,
            document.getElementById('app')
        );
    </script>
</body>
</html>

運行結果如下:
在這裏插入圖片描述
打開控制檯之後發現,報瞭如下警告:
在這裏插入圖片描述
提示我們數組當中的每一個元素都應該有一個key值,關於key值的重要性我們明天再來說明😊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章