IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 02 JSX学习 -> 正文阅读

[JavaScript知识库]02 JSX学习

使用vite处理jsx

vite引入的脚本必须是ESM的

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

JSX是什么

  1. 一种标签语法,在JS基础上进行的语法扩展
  2. 不是字符串、也不是HTML
  3. 是描述UI呈现与交互的直观的表现形式
  4. JSX被编译后会生成React元素 (React.createElement的效果),是对象
  5. 遵循JS的命名规范(小驼峰) class → className tabindex → tabIndex
  6. 用插值表达式写逻辑(绑定事件处理函数、显示变量)
  7. 单标签必须闭合
  8. 只能有一个根标签

render之前发生了什么

  1. 所有JSX都会转成字符串
  2. 所有输入的内容都会进行转义 (避免XSS攻击)

React元素

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

在这里插入图片描述

React为什么不把视图标记和逻辑分离

  1. 渲染和UI标记有逻辑耦合
  2. 即使耦合,也能实现关注点分离

插值表达式

  • 一切有效的,符合JS变成逻辑的表达式 { title }
  • 引号表示的是字符串

相关代码

  • 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创建React元素</div>
ReactDOM.render(
    el, // 不是类组件,不用React.createElement
    document.getElementById('app')
)
  • index.jsx
class MyButton extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            openStatus: true
        }
    }
    // button绑定的事件处理函数默认的this指向button
    // bind显示改变this指向类的实例(类组件中常规操作)
    statusChange() {
        this.setState({
            openStatus: !this.state.openStatus
        })
    }
    render() {
        return (
            <div className="button_wrap">
                <p className="text">
                    {this.state.openStatus ? '打开状态' : '关闭状态'}
                </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')
)
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:26:52  更:2021-09-24 10:29:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 2:03:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码