React--》初识React框架及其基本使用

news2025/1/15 21:06:04

目录

React 

React的安装与使用

JSX语法及使用

模块与组件

React开发者工具的安装

面向组件编程


React 

React是一个用于构建用户界面的JavaScript库。用户界面:HTML页面(前端)。React主要用来写HTML页面,或构建Web应用。

如果从 MVC的角度来看,React仅仅是视图层(V),也就是只负责视图的渲染,而并非提供了完整的M和C的功能。React起源于Facebook的内部项目,后又用来架设Instagram 的网站,并于2013年5月开源。

React高效的原因

1)使用虚拟DOM,不总是直接操作页面真实DOM。

2)DOM Diffing算法,最小化页面重绘。

React的安装与使用

新建终端执行如下npm命令:(默认安装最新版本)

# react包是核心,提供创建元素、组件等功能
# react-dom包提供DOM相关功能等
npm install react react-dom
<body>
  <div id="root"></div>
  <!-- 1、引入JS文件 -->
  <script src="./node_modules/react/umd/react.development.js"></script>
  <script src="./node_modules/react-dom/umd/react-dom.development.js"></script>

  <script>
    // 2、创建react元素
    // 参数一:元素名称、参数二:元素属性、第三个及其以后的参数:元素子节点
    const say = React.createElement('h1',null,'hello react')
    // 3、渲染react元素
    // 参数一:要渲染的react元素、参数二:挂载点,指定要渲染到页面中的位置
    ReactDOM.render(say,document.getElementById('root'))
    //渲染App到页面
  </script>
</body>

警告:React 18 不再支持 ReactDOM.render。请改用 createRoot。在您切换到新的 API 之前,您的应用会像运行 React 17 一样运行。

React18于2022年3月29日发布。ReactDOM.render虽然在React18中已被弃用,但仍然能在兼容模式下运行并使用,就是控制台老是有个警告,看着闹心。

撰写本文时,React的版本已经达到18.2,这里提一下,因为React的版本在17更新到18时,有很多的语法在React18中都弃用了,但是有很多老项目还是使用React17的版本,所以我们还是需要学会一下React17的语法。 接下来的几篇文章都是围绕React17进行讲解,后期会更新到18版本讲解React的变化和使用。

为了消除React18中使用17的语法所产生的警告,我们需要降低版本至17,此时我们可以使用以下命令进行降级。

注意:npm install 安装库@版本号 --save
17.x 表示的更新范围为>=17.0.0&&< 18.0.0
17.2.x 表示的更新范围为>=17.2.0&&< 17.3.0

npm install react@17.x react-dom@17.x --save

JSX语法及使用

react定义的一种类似于XML的JS扩展语法:JS+XML,全称是JavaScript XML。

本质:React.createElement(component,props,...children)方法的语法糖。

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

写法:var vdom = <h1>hello jsx!</h1> ,它不是字符串也不是HTML/XML标签,它最终产生的就是一个JS对象,标签名是任意的,可以是HTML标签或其它标签。

<body>
  <div id="root"></div>
  <!-- 引入react核心库 -->
  <script src="./node_modules/react/umd/react.development.js"></script>
  <!-- 引入react-dom,用于支持react操作dom -->
  <script src="./node_modules/react-dom/umd/react-dom.development.js"></script>
  <!-- 引入babel,用于将jsx转为js -->
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

  <script type="text/babel">
    // 创建虚拟DOM
    const say = (
      <h1 id="myh1">
        <span className="myspan">我是span标签</span>  
      </h1>
    )
    // 渲染虚拟DOM到页面
    ReactDOM.render(say,document.getElementById('root'))
    //渲染App到页面
  </script>
</body>

注意:在jsx中定义虚拟DOM时,不要写引号;标签中混入JS表达式时要用 {}

注意:在jsx中样式的类名指定不要用class,要用className;内联样式要用style={{key:value}}的形式进行书写。

注意:在jsx中只有一个根标签;所有标签必须闭合 ;标签的首字母要是小写需写html存在的标签,要是大写则表明是要渲染组件,如果组件没有定义则报错。

和Vue框架一样,当我们要循环遍历数据的时候,也是需要一个特有的key值,如下:

模块与组件

模块:向外提供特定功能的js程序,一般就是一个js文件,随着业务逻辑增加,代码越来越多且复杂,使用模块能复用js,简化js的编写,提高js运行效率。模块化:当应用的js都以模块来编写的,这个应用就是一个模块化的应用。

组件:用来实现局部功能效果的代码和资源的集合(html/css/js/image等等),一个页面的功能有时会很复杂,使用组件能复用编码,简化项目编码,提高运行效率。组件化:当应用是以多组件的方式实现,这个应用就是一个组件化的应用。

React开发者工具的安装

React官方也提供了 React Developer Tools  这个开发工具,如果有条件的小伙伴可以直接在谷歌浏览器上,找到网上商店,进入搜索工具直接下载即可。没有条件的小伙伴推荐使用一个专门下载插件的网站:极简插件 ,在里面搜索相关插件也能进行下载。

安装完插件之后,f12可以看到控制台出现如下两个选项:

面向组件编程

react官方给我们提供了两种定义组件的方式,如下:

函数式组件

<body>
  <div id="root"></div>
  <!-- 引入react核心库 -->
  <script src="./node_modules/react/umd/react.development.js"></script>
  <!-- 引入react-dom,用于支持react操作dom -->
  <script src="./node_modules/react-dom/umd/react-dom.development.js"></script>
  <!-- 引入babel,用于将jsx转为js -->
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

  <script type="text/babel">
    // 创建函数式组件 (注意:因为是组件,所以组件名称首字母需大写)
    function Demo(){
      return <h1>我是用函数定义的组件(适用于简单组件的定义)</h1>
    }
    // React解析组件标签,找到了Demo组件,发现组件是函数定义的,随后调用该函数
    // 将返回的虚拟DOM转为真实DOM,随后呈现到页面中
    ReactDOM.render(<Demo/>,document.getElementById('root'))
    //渲染App到页面
  </script>
</body>

在我们使用jsx语法时,有如下情况:

类式组件

使用类式组件需要你对JS的类有一定的掌握,如果不熟悉或者忘记了类的使用,推荐看一下我之前对JS的class类的讲解:读懂JS中—Class类 。

<body>
  <div id="root"></div>
  <!-- 引入react核心库 -->
  <script src="./node_modules/react/umd/react.development.js"></script>
  <!-- 引入react-dom,用于支持react操作dom -->
  <script src="./node_modules/react-dom/umd/react-dom.development.js"></script>
  <!-- 引入babel,用于将jsx转为js -->
  <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

  <script type="text/babel">
    // 创建类式组件 (继承react本身的组件对象)
    class Demo extends React.Component {
      // render放在Demo的原型对象上,供实例使用
      render() {
        console.log(this) // this指向的是 Demo组件的实例对象
        return <h1>我是用类定义的组件(适用于复杂组件的定义)</h1>
      }
    }
    // React解析组件标签,找到Demo组件
    // 发现组件是类定义的,虽然new出来该类实例,并通过该实例调用到原型的render方法
    // 将render返回的虚拟DOM转为真实DOM,随后呈现到页面上
    ReactDOM.render(<Demo/>,document.getElementById('root'))
  </script>
</body>

查看官方文档给出的写法也是这样:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第一天总结之后端登录功能的实现

第一天总结之后端登录功能的实现 一、 前端页面 从图片 很明显知道 两个intput输入框 一个输入username 一个输入password 从前端的页面代码 可以找到form表单 根据form表单的action属性了解到 点击登录跳转到 controller 层的 LoginServlet 二、controller 层 创建一个 Log…

2023年跨境电商新趋势,新手小白还有出路吗?

跨境电商一直位于我国对外开放的最前沿&#xff0c;当下已经成为我国进出口贸易的关键组成部分之一&#xff0c;是外贸企业顺利开展进出口业务的重要保障&#xff0c;更是拥有庞大发展潜力以及活力的贸易新业态。在经济全球化趋势下&#xff0c;充分发挥出跨境电商的战略新通道…

Java 包的使用详解

文章目录1. 概念2. 导入包中的类2.1 使用类的全路径2.2 导入包2.3 静态导入包3. 自定义包4. 包的访问权限控制5. 常用的包Java编程基础教程系列1. 概念 在开发过程中&#xff0c;会定义很多的类&#xff0c;随着类的定义越来越多&#xff0c;难免会出现类名重复的情况&#xf…

mac 安装redis

文章目录mac 安装redis使用Homebrew安装Redis1.搜索redis版本2.使用Homebrew安装命令3.查看是否安装完成4.启动redis服务5.查看redis服务进程6.redis-cli连接redis服务7.检测 redis 服务是否启动8.修改密码mac 安装redis 使用Homebrew安装Redis 首先这里需要安装homebrew 1.搜…

【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(上)

目录 一、配置 Alertmanager 发送报警到 qq 邮箱 1.1 设置 163 邮箱 1.2 创建 alertmanager 配置文件 1.3 创建 prometheus 告警规则配置文件 1.4 安装 prometheus 和 alertmanager 1.5 部署 alertmanager 的 service 1.6 浏览器访问 Prometheus 和 alertmanager 二、配…

ELK日志(2)

elasticsearch群集状态颜色&#xff1a;灰色&#xff1a;未连接绿色&#xff1a;数据完整态黄色&#xff1a;副本不完整红色&#xff1a;数据分片不完整紫色&#xff1a;数据分片复制过程群集主机角色&#xff1a;主节点master&#xff1a;负责管理调度工作节点&#xff1a; 负…

从IPv6的普及看中国未来网络的发展

最近看了一篇《邬贺铨&#xff1a;IPv6或是未来主流网络》的文章,谈到了未来网络的发展问题。IPv6也许是未来主流网络的发展方向。那么什么是IPv6呢,不妨来看下关于他的另一篇文章《邬贺铨&#xff1a;IPv6是IPv6规模部署第三阶段重要抓手》。 他谈到&#xff0c;IPv6是下一代互…

单绞机张力开环控制(绞臂行星差速机构算法)

PLC的开环和闭环张力控制算法,可以参看下面的文章链接: PLC张力控制(开环闭环算法分析)_plc张力控制程序_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线机的…

动态内存管理(1)

TIPS 1. 2. malloc, free, calloc, realloc 这些的基本前提都是在内存堆区 内存堆区不能与内存栈区两者混淆乱套 动态内存管理存在的原因 1. 为什么要有动态内存管理&#xff1f;其实我们之前学过比如说对内存的管理&#xff0c;比方说我申请一块内存空间&#xff1a; 1.…

任意方向边界框——day64 读论文:基于自适应目标定位特征卷积神经网络的高分辨率遥感影像多面向目标检测

Multi-Oriented Object Detection in High-Resolution Remote Sensing Imagery Based on Convolutional Neural Networks with Adaptive Object Orientation Features 基于自适应目标定位特征卷积神经网络的高分辨率遥感影像多面向目标检测1. Introduction2. Materials and Met…

jQuery ajax中dataFilter的用法

参考资料 jquery的ajax的dataFilter参数的使用 ⏹用于处理 XMLHttpRequest 原始响应数据的函数 运行在success函数之前, 对Ajax请求返回的原始数据进行预处理 可以对返回的json数据中的null属性进行过滤可以对返回的json数据添加一些自定义的属性 如果不返回原始数据,返回其他…

零代码连接邮箱腾讯云企业网盘,附件管理超轻松

在日常工作中&#xff0c;想必大家每天都会收到各种各样的工作邮件&#xff0c;并且很多重要的文件材料也是通过邮件附件的形式来传输的&#xff0c;那么如何一站式管理这些文件&#xff0c;对于提高办公效率就至关重要了。关于邮件附件管理&#xff0c;相信大家也都碰到过这样…

全面了解文件上传漏洞, 通关upload-labs靶场

靶场简介 upload-labs是一个专门用于学习文件上传漏洞攻击和防御的靶场。它提供了一系列模拟文件上传漏洞的实验环境&#xff0c;用于帮助用户了解文件上传漏洞的原理和防御技术。 这个靶场包括了常见的文件上传漏洞类型&#xff0c;如文件名欺骗、文件类型欺骗、文件上传功能…

1582_C代码实现的快速、可移植MD5信息摘要算法

全部学习汇总&#xff1a; GreyZhang/c_units: A small piece of code which can be reuse anywhere, I call it a unit. This is a collection of unit in C language! Ok, yes, it would be my toolbox. (github.com) 工作之中&#xff0c;同事用到了MD5信息摘要算法&#x…

面试加分题--socket是否是并发安全的?

今天和大家聊一个有点儿东西的面试题&#xff1a;socket是否是并发安全的&#xff1f; 为了帮助大家理解&#xff0c;我们先假设一个场景。 就拿游戏架构来说&#xff0c;我们想象中的游戏架构是下面这样的。 想象中的游戏架构 也就是用户客户端直接连接游戏核心逻辑服务器&…

解决⾃动驾驶中计算机视觉的⽬标检测问题

来源&#xff1a;投稿 作者&#xff1a;cairuyi01 编辑&#xff1a;学姐 最近读了《Object detection with location-aware deformable convolution and backward attention filtering》&#xff0c;这是⼀篇2019年刊登在CVPR上的CV论⽂。与解决普适性的CV任务不同&#xff0c…

SpringMVC如何优化Ajax技术

SpringMVC如何优化Ajax技术&#xff1f; AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 Ajax 不是一种新的编程语言&#xff0c;而是一种用于创…

EIoU和Focal-EIoU Loss

1、论文 论文题目&#xff1a;《Focal and Efficient IOU Loss for Accurate Bounding Box Regression》 2、引言 CIoU Loss虽然考虑了边界框回归的重叠面积、中心点距离、高宽比。但是其公式中的v反映的是高宽的差异&#xff0c;而不是高宽分别与其置信度的真实差异。因此&…

蚂蚁智能内容合规审核产品探秘

随着互联网服务的不断深化&#xff0c;产品营销的形式从传统文本、长图文&#xff0c;增加到短视频、直播等新媒介形态&#xff0c;展现形式愈加丰富的同时&#xff0c;也为营销宣传内容合规审核带来了诸多难题。如何解决与日俱增的审核量与合规审核人员有限之间的矛盾&#xf…

【阶段三】Python机器学习31篇:机器学习项目实战:基于皮尔逊相关系数搭建电影智能推荐系统

本篇的思维导图: 项目背景 在当今这个大数据时代,智能推荐系统的应用越来越广泛,网上购物、在线观影、新闻推送的背后都有智能推荐系统算法的支持。人们经常会在视频平台上观看电影,有时明确想要观看某部电影,有时则仅仅是随机搜寻。如果视频平台能利用基于物品的…