React 内 JSX了解及使用

目录

jsx基本概念及例子

jsx的基本用法

JSX表达式(有执行结果)

{}  语法嵌入不同的值 所呈现出来的特点

标签内行内样式

自定义组件

 驼峰命名


Jsx的全称是Javascript XML,react定义的一种类似XML的JS拓展语法:JS+XML,使我们可以用类似于xml方式描述视图。

本质是React.createElement(component, props, ...children) 的语法糖

原理:babel-loader会预编译JSx为React.createElement(type,props,...children)

虚拟DOM是React.createElement产生的

优点:执行快,类型安全,简单快速     执行需要使用预编译器

作用:用来简化创建虚拟DOM

  • 写法: var ele = <h1>Hello Jsx!</h1>
  • 注意1:它不是字符串,也不是HTML/XML标签,不要写引号
  • 注意2:它最终产生的是一个JS对象,需要使用 {}运行js表达式
  • 注意3:样式类名指定不要用class,要用className(因为class是ES6内定义的关键字,所以这里需要使用className进行区分)
  • 注意4:内联样式,要用style={{key:value}} 的形式去写。
  • 注意5:只能有一个根标签。
  • 注意6:标签必须闭合。
  • 注意7:标签首字母
    • 若字母小写开头,则将标签转为html内同名元素,若html中无该标签对应的同名元素,则报错。
    • 若字母大写开头,react就去渲染相应的组件,若组件没有定义,则报错。

标签名任意:HTML标签或者其他标签。

jsx基本概念及例子

JSX是一种js的语法拓展,表面上是HTML,本质上是通过babel转换为js执行,在所有JSX里,我们是可以在 {} 中使用js的语法。

JSX本质是转换为React.createElement在React内部构件虚拟DOM,最终渲染处页面。

举个例子:这个是jsx的写法

class App extends React.Component{
  render(){
    return {
      <div>
        Hello {this.props.name}, I am {3+4} years old.
      </div>
    }
  }
}

ReactDOM.render(
  <App name="React"/>,
  mountNode
)

转换成js的写法:

class App extends React.Component{
  render(){
    return React.crehateElement(
      "div",
      null,   // 这里为div的属性
      "Hello",
      this.props.name,
      ", I am",
      3 + 4,
      " year old"
    )
  }
}

ReactDOM.render(
  React.createElement(App, {name: "React"}),
  mountNode
)

jsx的基本用法

主要的

标签内的注释是  {/* 注释内容*/}

这里展示jsx实现变量操作等,具体目录结构

App.css内:

.img{
    border: 1px solid #f00;
}

logo.js内随便找一张将图片即可。

App.js   (全部代码)

import React, { Component } from 'react'
import logo from "./logo.jpg";
import "./App.css";

//函数型组件传递props,在这里必须带属性,这用于父子组件数据传递
function Welcome1(props) {
  return (
    <div>
      Hello,{props.name}
    </div>
  )
}

export default class App extends Component {
  //1.当需要状态时,需要构造函数
  constructor(props){
    super(props);
    //2.初始化状态,现在为响应式数据
    // 每次状态更新都会导致render函数重新执行
    this.state = {
      count: 0,
      date: new Date()
    }
  }
  componentDidMount(){
    this.timer = setInterval(() =>{
      //3.更新状态
      this.setState({
          date:new Date(),     //最简单的更新状态的方式
          count:this.state.count + 1
      })
      //注意1.不能直接改状态
      //this.state.data = new Date();  //错误的
    },1000);
    //注意2.setState()是异步的,需要在后面加一个参数进行异步调用
    //这个写法是函数写法   setState
    this.setState((prevState,prevProps)=>{
      return {
          count :prevState.count + 1
      }
    },() => {
        console.log(this.state.count);
    })
  }
  componentWillUnmount(){
    clearInterval(this.timer);
  }
  formatName(user){
    return user.firstName+' '+user.lastName;
  }
  render() {
    const name = "123";
    //jsx本身也是变量
    const jsx = <p>hello,everyone</p>
    return (
      <div>
        App组件
        {/* 表达式 */}
        <h1>{name}</h1>
        <p>{this.formatName({firstName:'tom',lastName:'jerry'})}</p>
        {/* 属性 */}
        <img src={logo} style={{width:'100px'}} className="img" alt="11"/>
        {/* jsx本身也是表达式 */}
        {jsx}
        {/* 组件属性传值(父传子) :传入的属性是只读的,单向数据流 */}
        <Welcome1 name="tom"></Welcome1>
        {/* 使用状态 */}
        <p>{this.state.date.toLocaleTimeString()}</p>
      </div>
    )
  }
}


在js内class是关键字,在react内均使用className作为额它的类名,没有class。

这个里面包含了jsx的几种简单用法。

只是简单例子运行完成后基本展示如下图:

JSX表达式(有执行结果)

变量/值   {num}

数字运算   {x+y}

判断  三元运算符  {1===2? true : false}

循环: 数组迭代方法map遍历

注⚠️:forEach无返回值,内部不能使用

所有命令式编程的循环  for   for/in   for/of   while  都不是jsx表达式

例子:三元表达式(下面的内部均为自定义组件)

<div>
{
    this.state.type ===1 ? 
    <Nowplaying></Nowplaying> :
    <Comingsoon></Comingsoon>
}
</div>

{}  语法嵌入不同的值 所呈现出来的特点

  1. number/ string:值是什么就渲染什么出来
  2. boolean/null/undefined/Symbol/Bigint:渲染的内容为空
  3. 除数组外其余对象不支持在  {}  中进行渲染,但是也有特殊情况:
    1. JSX虚拟DOM对象
    2. 给元素设置style行内样式,要求必须写成一个对象格式
  4. 数组对象:把数组的每一项分别拿出来渲染,并不是变为字符串渲染,组件没有逗号
  5. 函数对象:不支持在 {}中渲染,但是可以作为函数组件,用<Component/>方式渲染!

注意:不能直接嵌入除数组以外的对象,但是可以嵌入  JSX元素对象【虚拟DOM对象】 {React.createElement("button", null, '取消')}    

代码内部的jsx最后都要变为 React.createElement()格式

标签内行内样式

注:标签内行内样式的写法:

<img src={logo} style={{width:'100px',fontSize:'30px'}} className="img" alt="11"/>

这里是两层 {{}},可能学过vue的人知道,这个  使用“Mustache”语法 (双大括号) 的文本插值,用于展示数据。

但是这里不一样,最外层的大括号代表需要在内部写js的表达式,里面大括号表示你需要写关于样式的对象。内部样式需基于驼峰命名法

具体的值内需要加上 '引号'      style={{width:'100px',fontSize:'30px'}}

设置样式类名,需要把class替换为className

自定义组件

在jsx内的实现:

function Welcome1(props) {
  return (
    <div>
      Hello,{props.name}
    </div>
  )
}


<Welcome1 name="tom"></Welcome1>

这里呢,引入自定义标签,都必须是首字母大写(这里的代码是App.js内的例子代码)。

JSX内只能有js表达式(返回的值有结果),不能有js语句(if,for等)

注意:

1.在ReactDOM.createRoot()不能直接把HTML/body作为根容器渲染,需要额外指定一个盒子【例如:#root】

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <div></div>
);

2.每一个构建的视图,只能有一个根节点

        出现多个根节点则报错 Adjacent JSX elements must be wrapped in an enclosing tag.

        React给外面提供了一个特殊的节点(标签):React.Fragment  空文档标记标签

        <></>

        即可以保证只有一个根节点,又不增加层级!

 驼峰命名

小驼峰。camelCase   首字母小写,其余每个一个有意义单词首字母大写

大驼峰    PascalCase   首字母都要大写

kabab-case写法 :personal-box

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go Etcd 分布式锁实战

1 分布式锁概述 谈到分布式锁&#xff0c;必然是因为单机锁无法满足要求&#xff0c;在现阶段微服务多实例部署的情况下&#xff0c;单机语言级别的锁&#xff0c;无法满足并发互斥资源的安全访问。常见的单机锁如Java的jvm锁Lock、synchronized&#xff0c;golang的Mutex等 对…

类和对象(三)

目录 前言 1.再谈构造函数 1.1 初始化列表 1.2 explicit关键字 2.static成员 2.1 概念 2.2 特性 3.友元 3.1. 友元函数 3.2 友元类 4.内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 前言 今天小编给大家介绍的就是类最后的相关内容&#xff0c;希望大家好好学习理…

什么是可信时间戳?可信时间戳电子取证有效吗?

电子数据具有脆弱性、易变性、隐蔽性、载体多样性等特点&#xff0c;容易被复制、删除、篡改且难以被发现。因此&#xff0c;电子数据在实际的司法认定过程中&#xff0c;很难准确鉴定其生成的时间以及内容的真实性、完整性。可信时间戳是一种公认的技术手段&#xff0c;可为电…

精选 100 种最佳 AI 工具大盘点

为了应对对精简流程和数据分析日益增长的需求&#xff0c;整合人工智能工具在多个领域变得至关重要。 本文精选了2023年可用的100种最佳人工智能工具&#xff0c;旨在提高您的生产力、创造力和效率。 以下是 2023 年排名前 100 的人工智能工具&#xff1a; Aidoc&#xff1a;A…

Python获取酷得music并下载,获得无限听

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests re win R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源) 代码实现步骤 <基…

springCloud使用maven

springCloud项目使用maven集成nexus 一&#xff1a;故事背景二&#xff1a;基础概念2.1 什么是Maven2.2 什么是nexus 三&#xff1a;实操3.1 setting文件配置3.2 项目内pom.xml配置3.3 jar上传3.3.1 maven插件上传3.3.2 mvn命令上传3.3.3 页面上传3.3.4 通过Rest的方式进行上传…

麻了,真的不想做测试了...

前言 有不少技术友在测试群里讨论&#xff0c;近期的面试越来越难了&#xff0c;要背的八股文越来越多了,考察得越来越细&#xff0c;越来越底层&#xff0c;明摆着就是想让我们徒手造航母嘛&#xff01;实在是太为难我们这些测试工程师了。 这不&#xff0c;为了帮大家节约时…

今年这情况,大家多一手准备吧......

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…

Jmeter +Maven+jenkins 接口性能全自动化测试

背景&#xff1a; 首先用jmeter录制或者书写性能测试的脚本&#xff0c;用maven添加相关依赖&#xff0c;把性能测试的代码提交到github&#xff0c;在jenkins配置git下载性能测试的代码&#xff0c;配置运行脚本和测试报告&#xff0c;配置运行失败自动发邮件通知&#xff0c…

桂院校园导航小程序 云开发项目 二次开发教程 1.0.1

Gitee代码仓库&#xff1a;桂院校园导航小程序 GitHub代码仓库&#xff1a;GLU-Guide 先 假装 大伙都成功安装了云开发项目&#xff0c;并能在 微信开发者工具 和 手机 上正确运行。 接着就是 将项目 改成自己的学校。 代码里的注释我就不说明了&#xff0c;有提到 我的学校…

【实践篇】教你玩转JWT认证---从一个优惠券聊起 | 京东云技术团队

引言 最近面试过程中&#xff0c;无意中跟候选人聊到了JWT相关的东西&#xff0c;也就联想到我自己关于JWT落地过的那些项目。 关于JWT&#xff0c;可以说是分布式系统下的一个利器&#xff0c;我在我的很多项目实践中&#xff0c;认证系统的第一选择都是JWT。它的优势会让你…

Java版spring cloud 企业工程项目管理系统平台源码(三控:进度组织、质量安全、预算资金成本、二平台:招采、设计管理)

工程项目管理软件&#xff08;工程项目管理系统&#xff09;对建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营&#xff0c;全过程、全方位的对项目进行综合管理 工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#…

API接口设计方案

API&#xff08;Application Programming Interface&#xff09;接口是一种用于与应用程序进行交互的标准化接口&#xff0c;它允许第三方应用程序通过网络调用应用程序的功能。设计API接口是开发人员在开发软件系统时的重要任务之一&#xff0c;因为API接口的质量和易用性直接…

Docker部署apache superset

使用Docker compose在docker中部署Apache Superset 说明&#xff1a;部署步骤按照superset官网说明总结而来-2023年 1、第一步安装docker 、docker compose。 这里我选择手动下载rpm包&#xff0c;然后yum install *.rpm方式来安装。 下载地址&#xff1a;https://download.…

Dart整理笔记 | Dart参考手册

Dart SDK 安装 如果是使用Flutter 开发&#xff0c;Flutter SDK自带&#xff0c;无需单独安装Dart SDK。 如果需要独立调试运行Dart代码&#xff0c;需要独立安装Dart SDK。 官方文档&#xff1a;https://dart.dev/get-dart windows(推荐): http://www.gekorm.com/dart-wind…

行云流水| CI 3.0 云原生构建全新上线

研发过程中&#xff0c;如何直观且准确地获悉代码提交后的质量状态&#xff1f; 引入持续集成&#xff0c;可以自动化的对代码进行代码检查、单元测试、编译构建、甚至部署与发布&#xff0c;大幅提升开发人员的效率。 腾讯云 CODING 推出 CI 3.0 ——云原生构建&#xff0c;是…

win下C++部署深度学习模型之clion配置pytorch+opencv教程记录

win下clion配置pytorch和OpenCV 一、clion配置vs编译器以及测试二、clion配置pytorch2.1、下载libtorch2. 2、环境变量配置2.3、cmakelist.txt编写2.4、main函数测试运行 三、clion配置opencv3.1、源码下载3.2、编译3.3、环境变量配置3.4、cmakelist.txt编写3.5 main函数测试运…

【密码产品篇】动态口令系统密钥体系结构(SM3、SM4)

【密码产品篇】动态口令系统密钥体系结构&#xff08;SM3、SM4&#xff09; 动态口令是一种一次性口令机制&#xff0c;用户无须记忆口令&#xff0c;也无须手工更改口令。口令通过用户持有的客户端器件生成&#xff0c;并基于一定的算法与服务端形成同步&#xff0c;从而作为…

oracle 学习之 unpivot/pivot函数及hive实现该功能

Oracle中pivot函数详解_实泽有之&#xff0c;无泽虚之的博客-CSDN博客pivot函数格式&#xff1a;pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值))&#xff1b;pivot函数说明&#xff1a;实现将指定字段的值转换为列的效果。https://blog.csdn.net/qq_40018576/…

Win11的两个实用技巧系列之关闭分屏模式方法

怎么关闭Win11电脑分屏模式?Win11关闭分屏模式方法 有用户在使用电脑的时候不小心开启了电脑的分屏模式&#xff0c;导致自己无法正常的进行电脑操作了&#xff0c;本文就为大家带来了Win11关闭分屏模式方法&#xff0c;一起看看吧 Win11电脑分屏模式怎么关闭&#xff1f;有用…