<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
React 是一個用於構建使用者介面的 JavaScript 庫
它包括兩個庫:react.js
和 react-dom.js
react.js
:React 的核心庫,提供了 React.js 的核心功能,比如建立 React 元件、元件的生命週期等react-dom.js
:提供了和瀏覽器互動的 DOM 功能,比如:將元件渲染到頁面上我們可以通過官方提供的 CDN 連結引入 react.js 和 react-dom.js 這兩個庫,從而在 HTML 中使用
<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
React
是 React 庫的入口。如果你通過使用<script>
標籤的方式來載入 React,則可以通過React
全域性變數物件來獲得 React 的頂層 API如果你使用一個
<script>
標籤引入 react-dom,所有的頂層 API 都能在全域性ReactDOM
上呼叫
先來看看 React 和 ReactDOM 是什麼:
console.log(React) console.log(ReactDOM)
React
ReactDOM
可以看到是兩個物件,並且擁有很多方法,暫時不必深究每個方法
首先我們在 html 中引入:react.js react-dom.js
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
目前我們的程式碼寫在 html 中,所以都通過 script 標籤引入這兩個庫(後續不再贅述)
接著我們在介面上新增一個根元素:
<div id="root"></div>
如果我們想給這個根元素新增一段文字比如: Hello,React! ,我們可以這麼做:
<div id="root"> Hello,React! </div>
現在用 React 的方式來將這個標題渲染到頁面上
我們要用到 ReactDOM 提供的 API :ReactDOM.render()
ReactDOM.render("Hello, React!", document.getElementById("root"), () => { console.log("渲染完執行回撥函數"); });
事實上,render 方法接受 3 個引數:
如果我們想要渲染的內容是一個標題 h1 或者一個段落 p ,甚至是更復雜的元素巢狀該怎麼辦呢
<!-- 比如 --> <h1>Hello,React!</h1> <p>第一次學習React,太簡單了吧</p> <!-- 甚至 --> <div> <header> <h1>Hello,React!</h1> </header> <section> <p>第一次學習React,太簡單了吧</p> </section> </div>
React 提供了建立並返回 React 元素的 API:
React.createElement( type, [props], [...children] )
該方法接受 3 個引數:
{className: 'bg-red', id: 'title'}
建立元素並渲染到指定容器
const h1 = React.createElement("h1", null, "Hello,React!"); const p = React.createElement("p", null, "第一次學react,太簡單了吧"); const header = React.createElement("header", { id: "title" }, h1); const section = React.createElement("section", null, p); const div = React.createElement("div", null, header, section);
渲染到根元素:
ReactDOM.render(div, document.querySelector("#root"));
注意
1.render 方法可以接受 createElement 建立的 React 元素作為渲染物件
2.render 方法屬於 ReactDOM 物件
3.createElement 方法屬於 React 物件
每個 React 元素都用 createElement 建立有點麻煩啊,有沒有簡單點的辦法
事實上,對於:
const h1 = React.createElement("h1", null, "Hello,React!"); const p = React.createElement("p", null, "第一次學react,太簡單了吧"); const header = React.createElement("header", { id: "title" }, h1); const section = React.createElement("section", null, p); const div = React.createElement("div", null, header, section);
可以這麼寫:
const h1 = <h1>Hello,React!</h1>; const p = <p>第一次學react,太簡單了吧</p>; const header = ( <header> <h1>Hello,React!</h1> </header> ); const section = ( <section> <p>第一次學react,太簡單了吧</p> </section> ); const div = ( <div> <header> <h1>Hello,React!</h1> </header> <section> <p>第一次學react,太簡單了吧</p> </section> </div> );
這種標籤語法既不是字串也不是 HTML
它被稱為 JSX,是 JavaScript 的語法擴充套件
事實上,每個 JSX 元素一個語法糖,它們最終還是會呼叫React.createElement(component, props, ...children)
方法來建立 React 元素。不過我們寫起來更加簡單且直觀
我們將所有 createElement 建立的元素改寫成 JSX
得到如下完整 HTML 頁面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Static Template</title> <script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script> </head> <body> <div id="root"></div> </body> <script> const h1 = <h1>Hello,React!</h1>; const p = <p>第一次學react,太簡單了吧</p>; const header = ( <header> <h1>Hello,React!</h1> </header> ); const section = ( <section> <p>第一次學react,太簡單了吧</p> </section> ); const div = ( <div> <header> <h1>Hello,React!</h1> </header> <section> <p>第一次學react,太簡單了吧</p> </section> </div> ); ReactDOM.render(div, document.querySelector("#root")); </script> </html>
在瀏覽器中開啟,會發現頁面上的元素並沒有得到正確的渲染
並且控制檯輸出了錯誤:Uncaught SyntaxError: Unexpected token '<'
這是因為瀏覽器並不認識 JSX,JSX 只是 React 團隊自己造的東西,我們需要把 JSX 轉換成符合 JS 規範的語法,這樣瀏覽器就認識了
這跟將 ES6 語法轉換成 ES5 差不多
什麼東西能把 ES6 語法轉換成 ES5 ?
沒錯,Babel
同樣,藉助 Babel 我們可以將 JSX 轉換成 JS 語法
在頁面中新增如下 script 標籤
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
並將 script 標籤(指包含 JSX 語法的 script)的 type 屬性改為:text/babel
<script type="text/babel"> const h1 = <h1>Hello,React!</h1>; </script>
現在,元素可以正確的顯示了
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45