React詳細講解JSX和組件的使用
一、React JSX
1.1 JSX簡介
JSX是全稱是(JavaScript XML)按照React 官方的解釋,JSX 是一個 JavaScript 的語法擴展,類似于模板語法,或者說是一個類似于 XML 的 ECMAScript 語法擴展,并且具備 JavaScript 的全部功能。
例如:
const element = <h1>Hello, world!</h1>;
或者:
function App(){
return (
<p>Hello React!</p>
)
}
可以看到,定義的element和函數(shù)的返回值既不是字符串,也不是變量,而是html元素。
JSX 會被編譯為 React.createElement(), React.createElement() 將返回一個叫作“React Element”的 JS 對象。

JSX與React.createElement()相比,在實際功能效果一致的前提下,JSX 代碼層次分明、嵌套關系清晰;而 React.createElement 代碼則給人一種非?;靵y的“雜糅感”,這樣的代碼不僅讀起來不友好,寫起來也費勁。
JSX 語法糖允許我們開發(fā)人員像寫 HTML 一樣來寫我們的 JS 代碼,也就是在js中寫html代碼,在降低學習成本的同時還提升了我們的研發(fā)效率和研發(fā)體驗。
1.2 JSX表達式
React JSX使用的就是JavaScript語法,那么自然也 可以使用JavaScript表達式。但是,在React JSX中使用JavaScript表達式要使用大括號"{ }"括起來。
例如:
ReactDOM.render(
<p>Hello React! {alert('Hello!')}</p>,
document.getElementById('app')
);

React JSX是支持嵌入表達式的,什么意思呢?簡單的來講,我們可以在JSX中引用JSX外定義的變量。
例如:
const name = "yancy";
ReactDOM.render(
<p>Hello React! {alert(`Hello ${name}!`)}</p>,
document.getElementById('app')
);

1.3 JSX條件表達式
React JSX中的JavaScript表達式時無法使用if條件語句的,React也沒有提供類似vue的v-if的指令來實現(xiàn)條件判斷邏輯。
我們可以使用三元表達式來實現(xiàn)條件表達式。
ReactDOM.render(
<p>1 === 1 ? { 1 === 1 ? "true" : "false"}</p>,
document.getElementById('app')
);

我們還可以通過在jsx中調用函數(shù)表達式來實現(xiàn)邏輯判斷的目的,調用的函數(shù)可以返回一個jsx,因為,jsx可以作為參數(shù)傳遞并且嵌套在另一個jsx中。
1.4 JSX循環(huán)表達式
在jsx中不能直接使用for表達式,可以使用map方法來實現(xiàn)數(shù)組的遍歷。
const hobby = ["sing","jump","rap","basketball"];
ReactDOM.render(
(<ul>
{hobby.map(i => <li>{ i }</li>)}
</ul>),
document.getElementById('app')
);

1.5 JSX樣式表達式
react語法不支持內聯(lián)形式的CSS樣式,因此可以使用JSX樣式表達式來實現(xiàn)頁面樣式。
ReactDOM.render(
<p style={{fontSize: 1.2+'rem',color: "red"}}>Hello React!</p>,
document.getElementById('app')
);

可以看到style屬性綁定的其實是一個js對象,請和css的樣式表區(qū)分,如果我們將這個對象直接提取出來,那么就比較明了了。
const p_style = { fontSize: 1.2 + "rem", color: "red" };
ReactDOM.render(
<p style={p_style}>Hello React!</p>,
document.getElementById("app")
);
效果是一樣的。
1.6 JSX注釋表達式
注釋內容需要寫在大括號“{}”中,負責注釋的內容會直接在頁面上展示出來。

二、React組件
組件化開發(fā)是react的重要思想之一,組件就是UI切分成一些獨立的、可復用的部件,例如頭部、底部、一個彈窗組件等。React組件通過props可以接收任意的輸入值,因此props也可以理解外參數(shù)的概念。
React組件有兩種形式:類組件和函數(shù)組件。
2.1 類組件
class HelloComponent extends React.Component {
render() {
return <p>Hello React!</p>;
}
}
ReactDOM.render(<HelloComponent />, document.getElementById("app"));
React v16.8 之前的版本只支持類組件,所以很多以前項目是使用類組件寫的,但是現(xiàn)在新項目幾乎都是使用函數(shù)組件了,所以這里簡單地提一下類組件。
2.2 函數(shù)組件
function Hello() {
return <p>Hello React!</p>;
}
ReactDOM.render(
<div>
<Hello />
</div>,
document.getElementById("app")
);
注意組件名第一個字母必須大寫!
2.3 React Props
組件需要被復用,那么可以通過接收不同的參數(shù)來實現(xiàn)復用。
例如:
function MyDialog(props) {
return (
<dialog open>
<p>Hello {props.name}</p>
</dialog>
);
}
ReactDOM.render(
<div>
<MyDialog name="yancy" />
</div>,
document.getElementById("app")
);

可以看到,props其實就是包含了組件標簽的屬性。
雖然React Props很好用,但是React規(guī)定Props是不能被修改的,也就是說Props是只讀的參數(shù),我們不能在組件中試圖修改prop的內容。
到此這篇關于React詳細講解JSX和組件的使用的文章就介紹到這了,更多相關React JSX和組件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
react性能優(yōu)化useMemo與useCallback使用對比詳解
這篇文章主要為大家介紹了react性能優(yōu)化useMemo與useCallback使用對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
React實現(xiàn)控制減少useContext導致非必要的渲染詳解
這篇文章主要介紹了React如何有效減少使用useContext導致的不必要渲染,使用useContext在改變一個數(shù)據(jù)時,是通過自己逐級查找對比改變的數(shù)據(jù)然后渲染,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-11-11
React Native可復用 UI分離布局組件和狀態(tài)組件技巧
這篇文章主要為大家介紹了React Native可復用 UI分離布局組件和狀態(tài)組件使用技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09

