從CDN引入React(不推薦)
引入React要比Vue要麻煩,Vue只需引入一個即可,而React同時要引入三個: React,ReactDOM, babel-standalone,在bootCDN中引入,注意引入順序,先React,再ReactDOM,最后引入babel-standalone
引入
- React:
<script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.1/umd/react.development.min.js"></script> - ReactDOM:
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.1/umd/react-dom.development.min.js"></script> - babel-standalone:
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>
上面三個東西是什么
- React:React是react的核心庫,
- ReactDOM:提供操作DOM的react的擴(kuò)展庫,
- babel-standalone:解析JSX語法代碼,轉(zhuǎn)化為js代碼的庫
代碼示例:顯示hello lucidity
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.1/umd/react.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.1/umd/react-dom.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>
<script type="text/babel"> type的類型便不再是javascript,而是babel,
const Vdom =( <div> 虛擬DOM
<h1>hello lucidity</h1>
</div>)
ReactDOM.render(Vdom, document.getElementById('app')) 渲染到真實DOM上
</script>
</body>
其實,我們不引入babel-standalone也是可以寫代碼的,但是很不方便,看下面的栗子:要求div里面有一個span標(biāo)簽和h1標(biāo)簽
引入babel-standalone的代碼
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.1/umd/react.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.1/umd/react-dom.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>
<script type="text/babel">
const Vdom =( <div>
<span>hello lucidity</span>
<h1>hello lucidity</h1>
</div>)
ReactDOM.render(Vdom, document.getElementById('app'))
</script>
</body>
下面是不引入的代碼
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.1/umd/react.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.1/umd/react-dom.development.min.js"></script>
<script>
const Demo = React.createElement('div',null,[
React.createElement('span',null,'hello lucidity'),
React.createElement('h1',null,'hello lucidity')
//////React.createElement括號里面(標(biāo)簽,標(biāo)簽屬性,標(biāo)簽內(nèi)容)對應(yīng)h1,屬性無,'hello lucidity',標(biāo)簽屬性也可以寫成對象的形式
]);
ReactDOM.render(Demo,document.querySelector('#app'))
</script>
</body>
通過對比,顯然引入babel-standalone,使用jsx語法看起來更加簡潔
通過webpack引入React(老手用)
webpack已經(jīng)將上面三個東西配置好了
通過create-react-app引用
和vue-cli類似,
做項目再用,學(xué)習(xí)用cdn引入就行
虛擬DOM與真實DOM
什么是虛擬DOM?什么是真實DOM,看栗子
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.1/umd/react.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.1/umd/react-dom.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>
<script type="text/babel">
const Tdom = document.querySelector("#app")
const Vdom =( <div>
<span>hello lucidity</span>
</div>)
ReactDOM.render(Vdom, Tdom)
console.log(Vdom);
console.log(Tdom);
</script>
</body>
我們分別打印上面的Vdom和Tdom,看看它們到底是什么東西

image.png
關(guān)于虛擬DOM
- 本質(zhì)是Object類型的一般對象
- 虛擬DOM與真實DOM相比較‘輕’,因為虛擬DOM是React內(nèi)部在用,無需真實DOM上那么多屬性(點開控制臺中打印的內(nèi)容即可查看)
- 虛擬DOM最終會被React轉(zhuǎn)化為真實DOM,呈現(xiàn)在頁面上
JSX語法規(guī)則
如何給元素添加類名
- 要用className,比如要給上面圖中span添加一個.red類名:
<span className = "red">hello lucidity</span> - 如何用內(nèi)聯(lián)樣式寫呢
<span className="red" style = {{fontSize: '100px',color: 'white'}}>hello lucidity</span>
內(nèi)聯(lián)樣式要用{{}},外面{}表示要寫js表達(dá)式了,里面的{}表示要寫的是一個對象;注意:要寫多個屬性是,用逗號隔開;像font-size這樣的,要使用駝峰
綁定一個數(shù)據(jù)
比如說:let n= 'HELLO',把n放在lucidity的前面,要用{}包裹<span className = "red">{n.toLowerCase()}lucidity</span>
只有一個根標(biāo)簽
const Vdom =(
<div>
<span>{n.toLowerCase()} lucidity</span>
</div>
<div></div>
)
寫成這樣就會報錯
如何進(jìn)行循環(huán)
<body>
<div id="app"></div>
<script src="https://cdn.bootcdn.net/ajax/libs/react/17.0.1/umd/react.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/react-dom/17.0.1/umd/react-dom.development.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.0.0-beta.3/babel.min.js"></script>
<script type="text/babel">
const Tdom = document.querySelector("#app") 真實DOM
let arr = [1,2,3]
const Vdom =(
<ul>
{
arr.map((num,index)=>{
return <li key={index}>{num}</li> 要加key,要不然會報錯
})
}
</ul>
)
ReactDOM.render(Vdom, Tdom)
</script>
</body>
ul下面的{}里面為什么用map,而不用for循環(huán),因為{}里面必須為js表達(dá)式,而for循環(huán)不是表達(dá)式,而是js代碼語句
表達(dá)式有:
- a
- a+b
- demo(1)
- arr.map()
- function demo() {}