React JSX基礎(chǔ)語法教程示例
1、什么是 JSX
JSX 是 JavaScript 的一種語法擴(kuò)展??梢越M裝 UI 界面,同時可以和 JavaScript 語法配合使用。
2、為什么使用 JSX
- 使用熟悉的語法定義 HTML 元素,提供更加語義化的標(biāo)簽,使用 JSX 編寫模板更簡單快速
- 更加直觀:JSX 讓組件更加簡單、明了、直觀
- 抽象了 React 元素的創(chuàng)建過程,使得編寫組件變得更加簡單
舉例說明如下:
// react17版本之前 const children1 = React.createElement("li", null, "第一個組件內(nèi)容!"); const children2 = React.createElement("li", null, "第二個組件內(nèi)容!"); const root = React.createElement( "ul", { className: "list" }, children1, children2 ); // react17版本之后 import { jsx as _jsx } from "react/jsx-runtime"; import { jsxs as _jsxs } from "react/jsx-runtime"; const root = _jsxs("ul", { className: "list", children: [ _jsx("li", { children: "Hello", }), _jsx("li", { children: "World", }), ], });
JSX 等價如下:
const root = ( <ul className="list"> <li>Hello</li> <li>World</li> </ul> );
顯然 JSX 寫法更便于頁面的編寫與維護(hù),且簡單、直觀。
3、JSX 書寫規(guī)范
- JSX 的最外層只能有一個根元素,可以使用 div 、span 等標(biāo)簽
- 正常情況下,我可以在最外層包裹一個小括號(),方便我們更好的格式化代碼
- JSX 中的標(biāo)簽可以是單標(biāo)簽,也可以是雙標(biāo)簽;注意:如果是單標(biāo)簽,必須以/>結(jié)尾
- 在使用變量時,我們可以將其放在一個大括號中,大括號內(nèi)可以放置任何有效的 JavaScript 表達(dá)式
代碼示例如下:
const root = ( <div className="list"> <div>第一個組件內(nèi)容!</div> <img src="xxx.jpg" /> {1 === 1 && <div>第二個組件內(nèi)容!</div>} </div> );
4、JSX 注釋
通常有以下三種注釋
<ul className="list"> {/* 1、單行注釋 */} <li>第一個組件內(nèi)容!</li> // 2、行尾注釋 <li>第二個組件內(nèi)容!</li> {/* 3、多行注釋 1 2 3 */} </ul>
5、JSX 嵌入變量
變量在 JSX 使用,需要用大括號 { } 包裹;注意:使用的變量需要提前定義。如下。
const MyComponent = () => { const text = "Hello World!"; return <div>{text}</div>; }; export default MyComponent;
6、JSX 嵌入表達(dá)式
- 運算符表達(dá)式
- 三元表達(dá)式
- 函數(shù)調(diào)用
const MyComponent = () => { const isFinish = true; const calc = () => { const a = 1; const b = 2; return a + b; }; return ( <div> {/*1.運算符表達(dá)式*/} <span>2 + 3 的和為:{2 + 3}</span> {/*2.三元表達(dá)式*/} <span>家庭作業(yè)是否完成:{isFinish ? "是" : "否"}</span> {/*3.進(jìn)行函數(shù)調(diào)用*/} <span>{calc()}</span> </div> ); }; export default MyComponent;
7、JSX 綁定屬性
注意:在給元素綁定 style 時,外層的大括號是表示可傳入變量或者表達(dá)式。而內(nèi)部的大括號是一個對象,它里面是鍵值對,表示元素的樣式屬性及屬性值。另外,當(dāng)屬性是由多個單詞組成的時候,需要用駝峰命名法來表示,例如:fontSize
const MyComponent = () => { const title = "我是標(biāo)題的全部內(nèi)容!"; const url = "https://www.baidu.com"; const className = "span"; return ( <div> {/* 1、綁定普通屬性 */} <h2 title={title}>我是標(biāo)題...</h2> <a href={url}>百度一下</a> {/* 2.綁定class */} <span className={className}>我是span標(biāo)簽</span> <span className={["tag", "span"].join(" ")}>我是span標(biāo)簽2</span> {/* 3.綁定style */} <span style={{ color: "red", fontSize: 16 }}>我的字體顏色是紅色</span> </div> ); }; export default MyComponent;
8、JSX 綁定事件
可以看出 React 元素的事件處理和 DOM 元素的很相似,但存在一些語法上的差異:
- React 的事件采用駝峰式命名,而不是純小寫的方式
- 使用 JSX 語法時,需要傳入一個函數(shù)作為事件處理函數(shù),而不是一個字符串
- 使用函數(shù)時不能加括號,不然會直接執(zhí)行
- 如果函數(shù)過于簡單,可在 JSX 中直接編寫函數(shù)內(nèi)容
const MyComponent = () => { const onClick = () => { window.alert("您點擊了按鈕1"); }; return ( <div> <button onClick={onClick}>按鈕1</button> <button onClick={() => { window.alert("您點擊了按鈕2"); }} > 按鈕2 </button> </div> ); }; export default MyComponent;
9、JSX 條件渲染
常見的條件渲染的方式有以下三種:
- 方式一:條件判斷語句,適合邏輯較多的情況
- 方式二:三元運算符,適合邏輯比較簡單
- 方式三:與運算符&&,如果條件成立,渲染&&后面的組件;如果條件不成立,則都不渲染
const MyComponent = () => { const renderTitle = (key) => { if (key > 1) { return <span>我是標(biāo)題1</span>; } return <span>我是標(biāo)題2</span>; }; return ( <div> {renderTitle(2)} {2 > 1 ? <span>我會顯示出來</span> : <span>我會隱藏</span>} {2 > 1 && <span>我會顯示出來</span>} </div> ); }; export default MyComponent;
10、JSX 列表渲染
我們通常使用 Javascript 的 map 函數(shù)來處理 JSX 數(shù)組列表循環(huán)渲染;如下
const MyComponent = () => { const array = ["1", "2", "3", "4"]; return ( <ul> {array.map((i) => ( <li key={i}>{i}</li> ))} </ul> ); }; export default MyComponent;
注意:在渲染是,我們需要給渲染項添加一個 key,不然會報錯:warning: Each child in a list should have a unique "key" prop.
key 和 React 中的 diff 算法密切相關(guān)。
以上就是React JSX基礎(chǔ)語法教程示例的詳細(xì)內(nèi)容,更多關(guān)于React JSX基礎(chǔ)語法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
TypeScript在React項目中的使用實踐總結(jié)
這篇文章主要介紹了TypeScript在React項目中的使用總結(jié),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04react-native 實現(xiàn)購物車滑動刪除效果的示例代碼
這篇文章主要介紹了react-native 實現(xiàn)購物車滑動刪除效果的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01React實現(xiàn)一個支持動態(tài)插槽的Layout組件
這篇文章主要為大家詳細(xì)介紹了如何使用React實現(xiàn)一個支持動態(tài)注冊內(nèi)容的插槽組件,文中的示例代碼簡潔易懂,有需要的小伙伴可以了解一下2025-02-02