日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

02 JSX学习

發(fā)布時間:2023/12/10 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 02 JSX学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

使用vite處理jsx

vite引入的腳本必須是ESM的

npm init -y yarn add vite package.json 添加vite命令 index.html引入jsx

JSX是什么

  • 一種標簽語法,在JS基礎上進行的語法擴展
  • 不是字符串、也不是HTML
  • 是描述UI呈現(xiàn)與交互的直觀的表現(xiàn)形式
  • JSX被編譯后會生成React元素 (React.createElement的效果),是對象
  • 遵循JS的命名規(guī)范(小駝峰) class → className tabindex → tabIndex
  • 用插值表達式寫邏輯(綁定事件處理函數(shù)、顯示變量)
  • 單標簽必須閉合
  • 只能有一個根標簽
  • render之前發(fā)生了什么

  • 所有JSX都會轉成字符串
  • 所有輸入的內(nèi)容都會進行轉義 (避免XSS攻擊)
  • React元素

    JSX經(jīng)過內(nèi)部轉換為React元素,和React.createElement()創(chuàng)建的元素相同

    console.log(<h1 className="test">123</h1>)

    React為什么不把視圖標記和邏輯分離

  • 渲染和UI標記有邏輯耦合
  • 即使耦合,也能實現(xiàn)關注點分離
  • 插值表達式

    • 一切有效的,符合JS變成邏輯的表達式 { title }
    • 引號表示的是字符串

    修改state setState

    this.setState({openStatus: !this.state.openStatus })

    class組件必須render并return

    函數(shù)組件只return

    相關代碼

    • package.json
    {"name": "02","version": "1.0.0","description": "","main": "index.js","scripts": {"start": "vite"},"keywords": [],"author": "","license": "ISC","dependencies": {"vite": "^2.5.10"} }
    • index.html
    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>REACT 01</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="app"></div><script src="./index.jsx" type="module"></script> </body></html>
    • index.jsx
    const el = <div className="title">JSX創(chuàng)建React元素</div> ReactDOM.render(el, // 不是類組件,不用React.createElementdocument.getElementById('app') )
    • index.jsx
    class MyButton extends React.Component {constructor(props) {super(props)this.state = {openStatus: true}}// 注意,ES6語法中,state寫在constructor外部和內(nèi)部是一樣的// state = {// openStatus: true// }// button綁定的事件處理函數(shù)默認的this為undefined(不是button!!)// ES6 class模塊默認不對事件處理函數(shù)進行this的再綁定// bind顯示改變this指向類的實例(類組件中常規(guī)操作)statusChange() {this.setState({openStatus: !this.state.openStatus})}render() {return (<div className="button_wrap"><p className="text">{this.state.openStatus ? '打開狀態(tài)' : '關閉狀態(tài)'}</p><button onClick={this.statusChange.bind(this)}>{this.state.openStatus ? '去關閉' : '去打開'}</button></div>)} }ReactDOM.render(React.createElement(MyButton), // 類組件,不是React元素,要React.createElement// 或者這么寫<MyButton /> ,則為React元素document.getElementById('app') )

    ReactDOM.render第一個參數(shù)

    1. JSX

    const oEl = <h1>test</h1> ReactDOM.render(oEl,document.getElementById('app') )

    2. 函數(shù)

    // 返回JSX,和上面是換湯不換藥 function update() {return (<h1>test</h1>) } ReactDOM.render(update(),document.getElementById('app') )
    • 在方法里ReactDOM.render 執(zhí)行函數(shù)
    function update() {const oEl = <h1>test</h1>ReactDOM.render(oEl,document.getElementById('app')) } update()

    3. 寫類組件

    ReactDOM.render(<MyButton />,document.getElementById('app') ) // 或者 ReactDOM.render(React.createElement(MyButton),document.getElementById('app') )

    總結

    以上是生活随笔為你收集整理的02 JSX学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。