React 是一個用於構建用戶界面的 JavaScript 庫
。css
用戶界面:HTML頁面(前端)html
React 主要用來寫HTML頁面,或構建Web應用前端
若是從 MVC 的角度來看,React 僅僅是視圖層(V)
,也就是隻負責視圖的渲染,而並不是提供了node
完整的 M 和 C 的功能。react
React 起源於 Facebook
的內部項目,後又用來架設 Instagram 的網站,並於 2013 年 5 月開源web
你只須要描述 UI(HTML)看起來是什麼樣,就跟寫HTML同樣npm
React 負責渲染 UI,並在數據變化時更新 UI數組
const jsx = <div className="app"> <h1>Hello React! 動態變化數據:{count}</h1> </div>
基於組件瀏覽器
學習一次,隨處使用:能夠開發web、移動端(React-native
)、AR(React360)等等。安全
npm i react react-dom
react
包是核心,提供建立元素、組件等功能
react-dom
包提供 DOM 相關功能等
<script src="./node_modules/react/umd/react.development.js"></script> <script src="./node_modules/react-dom/umd/react-dom.development.js"></script>
第二步:建立react元素
第三步:渲染react元素到頁面中
<div id="root"></div> <script> //建立react元素 const title = React.createElement('h1', null, 'Hello React'); //渲染react元素 ReactDOM.render(title, document.getElementById('root')) </script>
// 返回值:React元素 // 第一個參數:要建立的React元素名稱 // 第二個參數:該React元素的屬性 // 第三個及其之後的參數:該React元素的子節點 const el = React.createElement('h1', { title: '標題' }, 'Hello React')
// 第一個參數:要渲染的React元素 // 第二個參數:DOM對象,用於指定渲染到頁面中的位置 ReactDOM.render(el, document.getElementById('root'))
腳手架是開發 現代Web 應用的必備。
充分利用 Webpack、Babel、ESLint 等工具輔助項目開發。
零配置,無需手動配置繁瑣的工具便可使用。
關注業務,而不是工具配置。
第一步:初始化項目
npx create-react-app my-app
第二步:啓動項目
npm start 或者 yarn start
npm v5.2.0 引入的一條命令
目的:提高包內提供的命令行工具的使用體驗
原來:先安裝腳手架包,再使用這個包中提供的命令
如今:無需安裝腳手架包,就能夠直接使用這個包提供的命令
推薦使用:npx create-react-app my-app npm init react-app my-app yarn create react-app my-app yarn 是 Facebook 發佈的包管理器,能夠看作是 npm 的替代品,功能與 npm 相同 yarn 具備快速、可靠和安全的特色 初始化新項目:yarn init 安裝包: yarn add 包名稱 安裝項目依賴項: yarn 其餘命令,請參考yarn文檔
第一步:導入 react 和 react-dom 兩個包
import React from 'react' import ReactDOM from 'react-dom'
第二步:調用 React.createElement()
方法建立 react 元素。
第三步:調用 ReactDOM.render()
方法渲染 react 元素到頁面中。
JSX 是 JavaScript XML 的簡寫,表示在 JavaScript 代碼中寫 XML(HTML) 格式的代碼。
優點:聲明式語法更加直觀、與HTML結構相同,下降了學習成本、提高開發效率
JSX 是 React 的核心內容
第一步:使用 JSX 語法建立 react 元素
let h1 = <h1>hello React</h1>;
第二步:使用 ReactDOM.render() 方法渲染 react 元素到頁面中
ReactDOM.render(h1,document.getElementById("root"));
React元素的屬性名使用駝峯命名法
特殊屬性名:class -> className、for -> htmlFor、tabindex -> tabIndex 。
沒有子節點的React元素能夠用 /> 結束 。
推薦:使用小括號包裹 JSX ,從而避免 JS 中的自動插入分號陷阱。
// 使用小括號包裹 JSX const dv = ( <div>Helo JSX</div> )
問題:爲何腳手架中可使用 JSX 語法?
JSX 不是標準的 ECMAScript 語法,它是 ECMAScript 的語法擴展 須要使用 babel 編譯處理後,才能在瀏覽器環境中使用 create-react-app 腳手架中已經默認有該配置,無需手動配置 編譯 JSX 語法的包爲:@babel/preset-react
數據存儲在JS中
語法:{js表達式}
注意:語法中是單大括號
,不是雙大括號
const name = 'Jack' const dv = ( <div>你好,我叫:{name}</div> )
單大括號中可使用任意的 JavaScript 表達式
JSX 自身也是 JS 表達式
const h1 = <h1>我是JSX</h1> const dv = ( <div>嵌入表達式:{h1}</div> )
注意:JS 中的對象是一個例外,通常只會出如今 style 屬性中
注意:不能在{}中出現語句(好比:if/for 等)
場景:loading效果
條件渲染:根據條件渲染特定的 JSX 結構
可使用if/else
或三元運算符
或邏輯與運算符
來實現
import React from "react"; import ReactDOM from "react-dom"; let isLoading = true; let load = () =>{ if(isLoading){ return <h2>加載中。。。</h2> } return <h2>加載成功</h2> } // let load = () => { // return isLoading ? <h2>加載中。。。</h2> : <h2>加載成功</h2>; // }; let el = <div>{load()}</div>; ReactDOM.render(el, document.getElementById("root"));
若是要渲染一組數據,應該使用數組的 **map() **方法
注意:渲染列表時應該添加 key 屬性,key 屬性的值要保證惟一
原則:map() 遍歷誰,就給誰添加 key 屬性
注意:儘可能避免使用索引號做爲 key
import React from "react"; import ReactDOM from "react-dom"; //定義數據 const songs = [ { id: 1, name: "癡心絕對" }, { id: 2, name: "像我這樣的人" }, { id: 3, name: "南山南" }, ]; //生成react元素 let arr = songs.map(v=><p key={v.id}>{v.id+"---"+v.name}</p>); let el = <div>{arr}</div>; //渲染 ReactDOM.render(el, document.getElementById("root"));
<h1 style={{ color: 'red', backgroundColor: 'skyblue' }}> JSX的樣式處理</h1>
注意:屬性名稱駝峯命名,而且屬性值要用引號包裹起來
// 導入樣式文件 import './index.css' //使用 <h1 className="title"> JSX的樣式處理</h1>