日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
React入門第二步:搞懂JSX語法

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

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

基本使用

\src\index.js

 
 
 
 
  1. import React from 'react'
  2. import ReactDom from 'react-dom'
  3. // 看上去是 HTML,但是實際是JSX 
  4. const title = 

    Hello React

  5. // 調(diào)用 ReactDom.render方法,傳入 jsx和節(jié)點對象
  6. ReactDom.render(title,document.getElementById('root'))

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

 
 
 
 
  1. import React from 'react'
  2. import ReactDom from 'react-dom'
  3. // 使用括號包裹jsx ,可以換行,代碼更加整潔
  4. const title = (
  5.   
  6.    

    Hello React

  7.     嘿嘿嘿
  8.   
  • )
  • ReactDom.render(title,document.getElementById('root'))
  • 設(shè)置 VS Code 編輯器,讓 JSX 代碼補全:

     
     
     
     
    1. 文件--選擇項--設(shè)置--用戶設(shè)置
    2. 在用戶設(shè)置添加
    3. "emmet.includeLanguages": {
    4.          "javascript":"javascriptreact"
    5. }

    如下圖所示:

    JSX 表達(dá)式

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

    先來一點簡單的常常甜頭,JSX 中的能夠進(jìn)行:

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

    接下來,我們開始搞它:

     
     
     
     
    1. import React from 'react';
    2. import ReactDOM from 'react-dom';
    3. const name= '西嶺老濕'
    4. function sayHello () {
    5.   return '大家好'
    6. }
    7. const obj = {
    8.   name: '劉備',
    9.   age: 100
    10. }
    11. const flag = true
    12. // 請開始你的表演====
    13. const title = (

      嘿嘿

      ) // JSX 本身也是可直接食用的值喲
    14. const App = (
    15.     
    16.       {/* 注釋在 jsx 中是這么個熊樣子*/}
    17.      

      name

       {/* 這就鴛鴦(原樣)展示了*/}
    18.      

      {name}

       {/* 動態(tài)獲取變量數(shù)據(jù) */}
    19.      

      {sayHello()}

       {/* 調(diào)用個函數(shù)違法嗎? 不 */}
    20.       {/* 執(zhí)行原生 JS 不合理嗎? 合理 */}
    21.      

      {console.log('1111')}

    22.      

      {Math.random()}

    23.      

      {JSON.stringify(obj)}

    24.       {/* 三元運算讓你吃醋了? 沒有 */}
    25.      

      {flag ? '登錄的狀態(tài)' :'執(zhí)行登錄'}

    26.       {/* 模板字符下,字符串和變量結(jié)婚,可以嗎? 可以 */}
    27.      

      {`hello, ${name}`}

    28.       {/* JSX 也是可直接食用的值喲 */}
    29.      
      {title}
    30.     
  •   )
  • ReactDOM.render(App,document.getElementById('root'));
    • JSX 本身就一個表達(dá)式
    • JSX 添加屬性:

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

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

    • JSX 添加子元素

    JSX 只有一個父元素

    • 單標(biāo)簽必須閉合
     
     
     
     
    1. // 01 jsx 本身就是一個表達(dá)式
    2. const names = 

      西嶺老濕

    3. // 02 添加屬性
    4. const age =99
    5. // 03 jsx 添加子元素(JSX只有一個父元素)
    6. // 04 單標(biāo)簽必須閉合
    7. // 組件
    8. functionApp() {
    9.   return (
    10.     // 返回中只能有一個JSX 塊
    11.     // 

       // 報錯
    12.     
    13.       {/* jsx 本身就是一個表達(dá)式 */}
    14.       {names}
    15.       {/* 添加屬性 */}
    16.       用戶年齡屬性

      {/* 字符串屬性 */}
    17.       用戶年齡屬性

      {/* 動態(tài)屬性 */}
    18.       {/* 單標(biāo)簽必須閉合 */}
    19.       {/*    */}{/*報錯*/}
    20.       {/* 單標(biāo)簽正確寫法 */}
    21.       
    22.     
  •   );
  • }
  • exportdefault App;
  • 最后,JSX 最好使用一個小括號 () 包裹。

    事件綁定

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

     
     
     
     
    1. // 事件處理函數(shù)
    2. const event1 =function(){
    3.   alert('嘿嘿 React')
    4. }
    5. functionApp (){
    6.   return (
    7.     
    8.       

      事件綁定

    9.       {/* 事件名使用駝峰法命名、直接使用函數(shù)賦值,不是函數(shù)調(diào)用 */}
    10.       你點啊
    11.     
  •   )
  • }
  • exportdefault App
  • 事件傳參

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

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

     
     
     
     
    1. //事件傳參
    2. const event1 =function(name,age){
    3.   alert(name)
    4.   alert(age)
    5. }
    6. functionApp (){
    7.   return (
    8.     
    9.       

      事件綁定

    10.       {/* 因為事件綁定需要接收函數(shù)本身,作為事件處理,不能直接調(diào)用 */}
    11.       {/* 因此傳參需要使用箭頭函數(shù)返回事件處理函數(shù),而不能是函數(shù)調(diào)用 */}
    12.       {event1('西嶺',16)}}>你點啊
    13.       
    14.       {/* 或者使用 bind等其方式,將函數(shù)本身作為返回值傳入 */}
    15.       你再點一下試試
    16.       {/* 再次強(qiáng)調(diào) JSX 就是 JS 擴(kuò)展,就是JS  */}
    17.     
  •   )
  • }
  • exportdefault App
  • 因此傳參需要使用箭頭函數(shù)返回事件處理函數(shù),而不能是函數(shù)調(diào)用,或者使用 bind 等其方式,將函數(shù)本身作為返回值傳入。

    再次強(qiáng)調(diào) JSX 就是 JS 擴(kuò)展,就是 JS。

    事件對象傳參

    01 函數(shù)無傳參:

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

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

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

    03 bind 等其方式:

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

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

     
     
     
     
    1. // 事件對象傳參
    2. const event1 =function (ev) {
    3.   console.log(ev);
    4. }
    5. functionApp() {
    6.   return (
    7.     
    8.       

      事件綁定

    9.       {/* 01 函數(shù)無傳參 */}
    10.       {/* 事件對象默認(rèn)傳入,因此直接在事件處理函數(shù)中形參接收即可 */}
    11.       點一下?  
    12.       {/* 02 箭頭函數(shù)傳參
    13.       因為事件對象有默認(rèn)傳入,而使用箭頭函數(shù)時,則需要在箭頭函數(shù)中傳入后
    14.       再在箭頭函數(shù)返回的函數(shù)中傳入 */}
    15.        { event1(ev,'西嶺',16) }}>你點啊
    16.       {/* 03 bind 等其方式
    17.       將函數(shù)本身作為返回值傳入,事件對象默認(rèn)會添加在最后一個參數(shù)中
    18.       無論有無參數(shù)傳入,事件對象都不需要寫,事件處理函數(shù)按順序接收即可 */}
    19.       你再點一下試試
    20.     
  •   )
  • }
  • exportdefault App
  • 列表渲染

    JSX 默認(rèn)會對數(shù)組進(jìn)行結(jié)構(gòu),因此可以直接在 JSX 中展示數(shù)組的值。

     
     
     
     
    1. const item1 = [1,3,5]
    2. functionApp() {
    3.   return (
    4.     
    5.       {/* JSX 默認(rèn)會對數(shù)組進(jìn)行結(jié)構(gòu) */}
    6.       

      {item1}

    7.     
  •   )
  • }
  • exportdefault App
  • 同理,如果數(shù)組元素值也是 JSX,同樣可以進(jìn)行直接使用。

     
     
     
     
    1. const item1 = [1,3,5]
    2. const item2 = [
    3.   

      item1

      ,
    4.   

      item1

      ,
    5.   

      item1

    6. ]
    7. functionApp() {
    8.   return (
    9.     
    10.       {/* JSX 默認(rèn)會對數(shù)組進(jìn)行結(jié)構(gòu) */}
    11.       

      {item1}

    12.       {/* 數(shù)組值為 jsx 同樣可以直接使用*/}
    13.       
    14.         {item2}
    15.       
  •     
  •   )
  • }
  • exportdefault App
  • 而在項目中,大部分獲取到的數(shù)組元素是對象數(shù)據(jù),要對其進(jìn)行結(jié)構(gòu)展示,就需要對數(shù)組進(jìn)行循環(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ù)組內(nèi)容結(jié)構(gòu)為JSX 數(shù)組
    13.     a2.push({arr[i].name})
    14.   }
    15.   return a2
    16. }
    17. functionApp() {
    18.   return (
    19.     
    20.       {/* 調(diào)用遍歷函數(shù),獲取 JSX 數(shù)組展示 */}
    21.       {loops()}
    22.     
  •   )
  • }
  • exportdefault App
  • 這樣的方式因為過于繁瑣,并不推薦使用。

    但是,基本思路是不變的,因為 JSX 可以自動結(jié)構(gòu)數(shù)組結(jié)構(gòu),我們只需要將數(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.     
    10.       {/* map 方法遍歷數(shù)組 */}
    11.       {arr.map(item=>

      {item.id}--{item.name}

       )}
    12.     
  •   )
  • }
  • exportdefault App
  • 樣式設(shè)置

    內(nèi)聯(lián)樣式

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

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

    15.     
  •   )
  • }
  • exportdefault App
  • 外聯(lián)樣式

    創(chuàng)建對應(yī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;
    7. }

    \src\App.js

     
     
     
     
    1. // 引入外聯(lián)樣式文件
    2. import './App.css'
    3. function App (){
    4.   return (
    5.     
    6.       

      小藍(lán)同學(xué)

    7.       胖藍(lán)

    8.     
    9.   )
    10. }
    11. export default App

    條件渲染

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

     
     
     
     
    1. import React from 'react'
    2. import ReactDom from 'react-dom'
    3. var f = false
    4. const fun1 = ()=>{
    5.     if(f){
    6.       return(

      哈哈哈哈

      )
    7.     }else{
    8.       return(

      嘿嘿

      )
    9.     }
    10. }
    11. const title = (
    12.   // 使用括號,可以換行,代碼更加整潔
    13.   
    14.     {fun1()}
    15.   
    16. )
    17. ReactDom.render(title,document.getElementById('root'))

    分享標(biāo)題:React入門第二步:搞懂JSX語法
    URL鏈接:http://www.dlmjj.cn/article/ccecdsh.html

    其他資訊