自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

React 入門第二步:搞懂 JSX 語法

開發(fā) 前端
JSX 是一個 JavaScript 的語法擴展,它不是字符串,也不是 HTML。JSX 可以很好地描述 UI 交互的本質形式,它具有 JavaScript 的全部功能。JSX 可以生成 React “元素”。

 [[419476]]

JSX 是一個 JavaScript 的語法擴展,它不是字符串,也不是 HTML。

JSX 可以很好地描述 UI 交互的本質形式,它具有 JavaScript 的全部功能。JSX 可以生成 React “元素”。

基本使用

\src\index.js

  1. import React from 'react' 
  2. import ReactDom from 'react-dom' 
  3.  
  4. // 看上去是 HTML,但是實際是JSX  
  5. const title = <h1>Hello React</h1> 
  6. // 調用 ReactDom.render方法,傳入 jsx和節(jié)點對象 
  7. ReactDom.render(title,document.getElementById('root')) 

在使用 JSX 時,可以簡單直接的按照 HTML 的規(guī)則來使用(你需要牢記它并不是 html ),那么有多行代碼時,需要使用括號 () 包裹。

  1. import React from 'react' 
  2. import ReactDom from 'react-dom' 
  3.  
  4. // 使用括號包裹jsx ,可以換行,代碼更加整潔 
  5. const title = ( 
  6.   <div> 
  7.    <h1>Hello React</h1> 
  8.     <span>嘿嘿嘿</span> 
  9.   </div> 
  10.  
  11. ReactDom.render(title,document.getElementById('root')) 

設置 VS Code 編輯器,讓 JSX 代碼補全:

  1. 文件--首選項--設置--用戶設置 
  2.  
  3. 在用戶設置添加 
  4. "emmet.includeLanguages": { 
  5.          "javascript":"javascriptreact" 

如下圖所示:

JSX 表達式

前面說到 JSX 具有 JavaScript 的全部功能,而在具體使用時可以直接套用 HTML 的規(guī)則。換句話說,在 HTML 規(guī)則里,如何展現(xiàn) JS 的能力呢?

先來一點簡單的常常甜頭,JSX 中的能夠進行:

  • 動態(tài)顯示數(shù)據(jù) {}
  • 調用方法: 自定義 + 內置
  • 支持表達式, 支持三元表達式
  • 模板字符串

接下來,我們開始搞它:

  1. import React from 'react'
  2. import ReactDOM from 'react-dom'
  3.  
  4. const name'西嶺老濕' 
  5.  
  6. function sayHello () { 
  7.   return '大家好' 
  8.  
  9. const obj = { 
  10.   name'劉備'
  11.   age: 100 
  12.  
  13. const flag = true 
  14.  
  15. // 請開始你的表演==== 
  16. const title = (<h2>嘿嘿</h2>) // JSX 本身也是可直接食用的值喲 
  17.  
  18. const App = ( 
  19.     <div> 
  20.       {/* 注釋在 jsx 中是這么個熊樣子*/} 
  21.  
  22.      <p>name</p> {/* 這就鴛鴦(原樣)展示了*/} 
  23.  
  24.      <p>{name}</p> {/* 動態(tài)獲取變量數(shù)據(jù) */} 
  25.  
  26.      <p>{sayHello()}</p> {/* 調用個函數(shù)違法嗎? 不 */} 
  27.  
  28.       {/* 執(zhí)行原生 JS 不合理嗎? 合理 */} 
  29.      <p>{console.log('1111')}</p> 
  30.      <p>{Math.random()}</p> 
  31.      <p>{JSON.stringify(obj)}</p> 
  32.  
  33.       {/* 三元運算讓你吃醋了? 沒有 */} 
  34.      <p>{flag ? '登錄的狀態(tài)' :'執(zhí)行登錄'}</p> 
  35.  
  36.       {/* 模板字符下,字符串和變量結婚,可以嗎? 可以 */} 
  37.      <p>{`hello, ${name}`}</p> 
  38.  
  39.       {/* JSX 也是可直接食用的值喲 */} 
  40.      <div>{title}</div> 
  41.     </div> 
  42.   ) 
  43.  
  44. ReactDOM.render(App,document.getElementById('root')); 
  • JSX 本身就一個表達式
  • JSX 添加屬性:

字符串屬性,直接使用雙引號包裹

動態(tài)屬性,不用雙引號,直接使用 {} class={xxx}

  • JSX 添加子元素

JSX 只有一個父元素

  • 單標簽必須閉合
  1. // 01 jsx 本身就是一個表達式 
  2. const names = <h3>西嶺老濕</h3> 
  3.  
  4. // 02 添加屬性 
  5. const age =99 
  6.  
  7. // 03 jsx 添加子元素(JSX只有一個父元素) 
  8.  
  9.  
  10. // 04 單標簽必須閉合 
  11.  
  12. // 組件 
  13. functionApp() { 
  14.   return ( 
  15.     // 返回中只能有一個JSX 塊 
  16.     // <p></p> // 報錯 
  17.     <div> 
  18.       {/* jsx 本身就是一個表達式 */} 
  19.       {names} 
  20.  
  21.       {/* 添加屬性 */} 
  22.       <page="age">用戶年齡屬性</p>{/* 字符串屬性 */} 
  23.       <page={age}>用戶年齡屬性</p>{/* 動態(tài)屬性 */} 
  24.  
  25.       {/* 單標簽必須閉合 */} 
  26.       {/* <img >   */}{/*報錯*/} 
  27.       {/* 單標簽正確寫法 */} 
  28.       <img/> 
  29.  
  30.     </div> 
  31.   ); 
  32.  
  33. exportdefault App; 

最后,JSX 最好使用一個小括號 () 包裹。

事件綁定

事件處理函數(shù)和事件綁定

  1. // 事件處理函數(shù) 
  2. const event1 =function(){ 
  3.   alert('嘿嘿 React'
  4.  
  5. functionApp (){ 
  6.   return ( 
  7.     <div> 
  8.       <h1>事件綁定</h1> 
  9.       {/* 事件名使用駝峰法命名、直接使用函數(shù)賦值,不是函數(shù)調用 */} 
  10.       <buttononClick={event1}>你點啊</button> 
  11.     </div> 
  12.   ) 
  13.  
  14. exportdefault App 

事件傳參

事件處理函數(shù)和事件綁定

因為事件綁定需要接收函數(shù)本身,作為事件處理,不能直接調用。

  1. //事件傳參 
  2. const event1 =function(name,age){ 
  3.   alert(name
  4.   alert(age) 
  5.  
  6. functionApp (){ 
  7.   return ( 
  8.     <div> 
  9.       <h1>事件綁定</h1> 
  10.       {/* 因為事件綁定需要接收函數(shù)本身,作為事件處理,不能直接調用 */} 
  11.       {/* 因此傳參需要使用箭頭函數(shù)返回事件處理函數(shù),而不能是函數(shù)調用 */} 
  12.       <buttononClick={()=>{event1('西嶺',16)}}>你點啊</button> 
  13.       <br/> 
  14.       {/* 或者使用 bind等其方式,將函數(shù)本身作為返回值傳入 */} 
  15.  
  16.       <buttononClick={event1.bind(null,'嬴政',999)}>你再點一下試試</button> 
  17.  
  18.       {/* 再次強調 JSX 就是 JS 擴展,就是JS  */} 
  19.     </div> 
  20.   ) 
  21.  
  22. exportdefault App 

因此傳參需要使用箭頭函數(shù)返回事件處理函數(shù),而不能是函數(shù)調用,或者使用 bind 等其方式,將函數(shù)本身作為返回值傳入。

再次強調 JSX 就是 JS 擴展,就是 JS。

事件對象傳參

01 函數(shù)無傳參:

事件對象默認傳入,因此直接在事件處理函數(shù)中形參接收即可。

02 箭頭函數(shù)傳參:

因為事件對象有默認傳入,而使用箭頭函數(shù)時,則需要在箭頭函數(shù)中傳入后,再在箭頭函數(shù)返回的函數(shù)中傳入。

03 bind 等其方式:

將函數(shù)本身作為返回值傳入,事件對象默認會添加在最后一個參數(shù)中。

無論有無參數(shù)傳入,事件對象都不需要寫,事件處理函數(shù)按順序接收即可。

  1. // 事件對象傳參 
  2. const event1 =function (ev) { 
  3.   console.log(ev); 
  4.  
  5. functionApp() { 
  6.   return ( 
  7.     <div> 
  8.       <h1>事件綁定</h1> 
  9.       {/* 01 函數(shù)無傳參 */} 
  10.       {/* 事件對象默認傳入,因此直接在事件處理函數(shù)中形參接收即可 */} 
  11.       <buttononClick={event1}>點一下?</button>  <br/> 
  12.  
  13.  
  14.       {/* 02 箭頭函數(shù)傳參 
  15.       因為事件對象有默認傳入,而使用箭頭函數(shù)時,則需要在箭頭函數(shù)中傳入后 
  16.       再在箭頭函數(shù)返回的函數(shù)中傳入 */} 
  17.       <buttononClick={(ev) => { event1(ev,'西嶺',16) }}>你點啊</button><br/> 
  18.  
  19.       {/* 03 bind 等其方式 
  20.       將函數(shù)本身作為返回值傳入,事件對象默認會添加在最后一個參數(shù)中 
  21.       無論有無參數(shù)傳入,事件對象都不需要寫,事件處理函數(shù)按順序接收即可 */} 
  22.       <buttononClick={event1.bind(null)}>你再點一下試試</button> 
  23.  
  24.     </div> 
  25.   ) 
  26.  
  27. exportdefault App 

列表渲染

JSX 默認會對數(shù)組進行結構,因此可以直接在 JSX 中展示數(shù)組的值。

  1. const item1 = [1,3,5] 
  2.  
  3. functionApp() { 
  4.   return ( 
  5.     <div> 
  6.       {/* JSX 默認會對數(shù)組進行結構 */} 
  7.       <h1>{item1}</h1> 
  8.     </div> 
  9.   ) 
  10.  
  11. exportdefault App 

同理,如果數(shù)組元素值也是 JSX,同樣可以進行直接使用。

  1. const item1 = [1,3,5] 
  2. const item2 = [ 
  3.   <p>item1</p>, 
  4.   <p>item1</p>, 
  5.   <p>item1</p> 
  6.  
  7. functionApp() { 
  8.   return ( 
  9.     <div> 
  10.       {/* JSX 默認會對數(shù)組進行結構 */} 
  11.       <h1>{item1}</h1> 
  12.       {/* 數(shù)組值為 jsx 同樣可以直接使用*/} 
  13.       <div> 
  14.         {item2} 
  15.       </div> 
  16.     </div> 
  17.   ) 
  18.  
  19. exportdefault App 

而在項目中,大部分獲取到的數(shù)組元素是對象數(shù)據(jù),要對其進行結構展示,就需要對數(shù)組進行循環(huán)操作后使用。

  1. // 數(shù)組數(shù)據(jù) 
  2. const arr = [ 
  3.   { id:1,name:'癡心絕對' }, 
  4.   { id:2,name:'像我這樣的人' }, 
  5.   { id:3,name:'南山南' } 
  6.  
  7. // === 數(shù)據(jù)遍歷 === 
  8. functionloops() { 
  9.   var a2 = [] 
  10.   // 循環(huán)遍歷數(shù)據(jù) 
  11.   for (var i =0; i < arr.length; i++) { 
  12.     // 將數(shù)組內容結構為JSX 數(shù)組 
  13.     a2.push(<h1key={arr[i].id}>{arr[i].name}</h1>) 
  14.   } 
  15.   return a2 
  16.  
  17. functionApp() { 
  18.   return ( 
  19.     <div> 
  20.       {/* 調用遍歷函數(shù),獲取 JSX 數(shù)組展示 */} 
  21.       {loops()} 
  22.     </div> 
  23.   ) 
  24.  
  25. exportdefault App 

這樣的方式因為過于繁瑣,并不推薦使用。

但是,基本思路是不變的,因為 JSX 可以自動結構數(shù)組結構,我們只需要將數(shù)據(jù)的數(shù)據(jù)遍歷為 JSX 數(shù)據(jù)形式使用就可以了,因此,我們可以選擇一種更為優(yōu)雅的遍歷方式map() 函數(shù)。

  1. // 數(shù)組數(shù)據(jù) 
  2. const arr = [ 
  3.   { id:1,name:'絕對癡心' }, 
  4.   { id:2,name:'像我這樣帥的人' }, 
  5.   { id:3,name:'南山難' } 
  6.  
  7. functionApp() { 
  8.   return ( 
  9.     <div> 
  10.       {/* map 方法遍歷數(shù)組 */} 
  11.       {arr.map(item=><h3>{item.id}--{item.name}</h3> )} 
  12.     </div> 
  13.   ) 
  14.  
  15. exportdefault App 

樣式設置

內聯(lián)樣式

樣式需要以對象形式展示:

  1. //聲明樣式對象 
  2. const styles = { 
  3.   color:'red'
  4.   // 樣式的屬性名需要處理,要么 
  5.   // font-size:'20px', // 直接使用報錯 
  6.   fontSize:'30px',// 轉大寫 √ 
  7.   'background-color':'pink'// 引號包裹 √ 
  8.  
  9. functionApp (){ 
  10.   return ( 
  11.     <div> 
  12.       {/* 內聯(lián)樣式需要以對象形式展示 */} 
  13.       <h3style={{color:"red"}}>西嶺老濕</h3> 
  14.       <pstyle={styles}>真的很帥</p> 
  15.     </div> 
  16.   ) 
  17.  
  18. exportdefault App 

外聯(lián)樣式

創(chuàng)建對應的 CSS 文件,使用模塊化語法規(guī)則引入樣式文件。

創(chuàng)建 CSS 文件 \src\App.css

  1. body{ 
  2.   background-color: skyblue; 
  3.   color: blue; 
  4.  
  5. .box{ 
  6.   font-size: 30px; 

\src\App.js

  1. // 引入外聯(lián)樣式文件 
  2. import './App.css' 
  3.  
  4. function App (){ 
  5.   return ( 
  6.     <div> 
  7.       <h3>小藍同學</h3> 
  8.       <pclassName="box">胖藍</p> 
  9.     </div> 
  10.   ) 
  11. export default App

條件渲染

條件渲染就是函數(shù)調用。

  1. import React from 'react' 
  2. import ReactDom from 'react-dom' 
  3.  
  4. var f = false 
  5.  
  6. const fun1 = ()=>{ 
  7.     if(f){ 
  8.       return(<h1>哈哈哈哈</h1>) 
  9.     }else
  10.       return(<h2>嘿嘿</h2>) 
  11.     } 
  12. const title = ( 
  13.   // 使用括號,可以換行,代碼更加整潔 
  14.   <div> 
  15.     {fun1()} 
  16.   </div> 
  17.  
  18. ReactDom.render(title,document.getElementById('root')) 

 【編輯推薦】

 

責任編輯:武曉燕 來源: 勾勾的前端世界
相關推薦

2013-09-27 09:56:41

軟件革命云計算

2011-09-02 14:06:38

PhoneGapEclipseAndroid

2012-09-21 12:58:37

Java項目Java開發(fā)

2011-12-02 16:56:23

美信云網(wǎng)管

2021-08-24 05:07:25

React

2021-09-02 18:46:40

React CSS 組件

2021-09-01 18:42:57

React Props組件

2021-08-26 18:46:55

React組件前端

2021-10-12 23:01:42

項目語法React

2018-10-23 10:35:20

react.jsReact面試題前端

2009-07-24 13:07:59

BLL類

2013-01-30 16:07:46

2009-07-24 13:25:43

創(chuàng)建數(shù)據(jù)訪問層

2021-05-24 06:00:20

ReactJSXJS

2010-04-12 10:16:55

Oracle存儲過程

2021-05-21 09:34:40

React React 17前端

2016-10-26 19:33:45

數(shù)據(jù)分析大數(shù)據(jù)

2010-03-12 10:20:19

Fedora內核

2022-06-30 05:26:41

網(wǎng)絡安全業(yè)務

2011-04-01 10:07:01

OSPF路由器
點贊
收藏

51CTO技術棧公眾號