React学习[一]

news2024/11/27 8:44:12

React学习[一]

  • React概述
    • React特点
      • 声明式
      • 基于组件
      • 学习一次,随处可用
    • React基本使用
      • React使用
        • 方法说明
    • React脚手架意义
      • 脚手架初始化项目
        • npx命令介绍
      • 在脚手架中使用react
  • JSX
    • JSX的基本使用
      • JSX
      • 使用步骤
    • JSX中使用JavaScript表达式
      • 嵌入式JS表达式
    • JSX的条件渲染
    • JSX的列表渲染
    • JSX的样式处理

React概述

React是一个用于构建用户界面的JavaScript库。
用户界面:HTML页面(前端);
React主要用来写HTML页面,或构建Web应用;
如果从MVC的角度来看,React仅仅是视图层(V),也就是只负责视图的渲染,而并非提供了完整的M和C的功能。

React特点

声明式

你只需要描述UI(HTML)看起来是怎么样,就跟写HTML一样
React只负责渲染UI,并在数据变化时更新UI

const jsx = <div className="app">
	<h1>Hello React! 动态变化数据: {count}</h1>
</div>

基于组件

组件是React最重要的内容
组件表示页面中的部分内容
组合、复用多个组件,可以实现完整的页面功能

学习一次,随处可用

使用React可以开发Web应用
使用React可以开发移动端原生应用( react-native )
使用React可以开发VR(虚拟现实)应用(react360)

React基本使用

安装命令:npm i react react-dom
react包是核心,提供创建元素、组件等功能
react-dom包提供DOM相关功能等

React使用

1、引入react和react-dom两个js文件

<script src="./node_ modules/react/umd/react.development.js"></ script>
<script src="./node_ modules/react-dom/umd/react-dom.development.js"></ script>

2、创建react元素
3、渲染react元素到页面中

<div id="root"></div>
<script>
	const title = React.createElement('hl', null, 'Hello React')
	ReactDOM.render(title, document.getElementById('root'))
</script>

方法说明

react.createElement()

// 返回值: react元素
// 参数1: 要创建的react元素名称,同html名称是一样的
// 参数2: 该react元素的属性
// 第3个及其以后的参数: 元素节点或子节点
const el = React.createElement('h1', {title:'标题'}, 'Hello React')

ReactDOM.render()

// 3、渲染React元素
// 参数1: 要渲染的react元素
// 参数2:挂载点(DOM对象,用于指定渲染到页面中的位置)
ReactDOM.render(el, document.getElementById('root'))

React脚手架意义

脚手架初始化项目

初始化项目命令:npx create-react-app my-app(项目名字)(推荐使用),create-react-app是脚手架名字,不能更改;
npm init react-app my-app
yarn create react-app my-app
yarn是Facebook发布的包管理器,可以看作npm的替代品,功能与npm相似;具有快速、可靠和安全的特点

在这里插入图片描述
出现Happy hacking表示成功
启动项目,在项目根目录执行命令npm startyarn start(安装有yarn的使用yarn start),在此之前,需要使用命令cd my-app进入根目录

npx命令介绍

目的:提升包内提供的命令行工具的使用体验
原来:先安装脚手架包,再使用这个包中提供的命令
现在:无需安装脚手架包,就可以直接使用这个包提供的命令

在脚手架中使用react

1、导入react和react-dom两个包;

import React from 'react'
import ReactDOM from 'react-dom'

2、调用React.createElement()方法创建react元素;
3、调用ReactDOM.render()方法渲染react元素到页面中。

JSX

JSX的基本使用

1.繁琐不简洁。
2.不直观,无法一眼看出所描述的结构。
3.不优雅,用户体验不爽。

React.createElement(
	'div',
	{className: 'shopping-list'},
	React.createElement('h1', null, 'shopping List'),
	React.createElement(
		'ul' ,
		nul1,
		React.createElement('li', null, 'Instagram'),
		React.createElement('li', null, 'WhatsApp')
	)
)

JSX

JSX是JavaScript XML的简写,表示在JavaScript代码中写XML ( HTML )格式的代码。
优势:声明式语法更加直观、与HTML结构相同,降低了学习成本、提升开发效率。

<div className="shopping-list">
	<h1>Shopping List</h1>
	<ul >
		<li> Instagram</li>
		<li>WhatsApp</li>
	</ul>
</div>

JSX是react的核心

使用步骤

1.使用JSX语法创建react元素

// 使用JSX语法,创建react元素:
const title = <h1>Hello JSX</h1>

2.使用ReactDOM.render0方法渲染react元素到页面中

// 渲染创建好的React元素
ReactDOM.render(title, root)

注意:

  • React元素的属性名使用驼峰命名法
  • 特殊属性名:class -> className(18版本可用class),for -> htmlFor,tabindex -> tabIndex
  • 没有子节点的react元素可以用/>结束
  • 推荐:使用小括号包裹JSX,从而避免JS中的自动插入分号陷阱
// 使用小括号包裹JSX
const title = (< h1 > Hello JSX < /h1>)

JSX中使用JavaScript表达式

嵌入式JS表达式

数据存储在JS中
语法:{JavaScript表达式}
注意:语法中是单大括号,不是双大括号

const name = 'Jack'
const dv = (<div>你好,我叫{name}</div>)

注意点:

  • 单大括号中可以使用任意的JavaScript表达式
  • JSX自身也是JS表达式
  • JS中的对象是一个例外,一般只会出现在style属性中
  • 不能在{}中出现语句,比如if、for等
const h1 = <h1>JSX</h1>
const dv = (<div>嵌入表达式:{h1}</div>)

JSX的条件渲染

根据不同的条件来渲染不同的JSX结构
可以发现,写JSX的条件渲染与我们之前编写代码的逻辑是差不多的,根据不同的判断逻辑,返回不同的 JSX结构,然后渲染到页面中
可以使用if/else或三元运算符或逻辑与运算符来实现

// 条件渲染
const isLoading = true
const loadData = () => {
    if (isLoading) {
        return <div>数据加载中,请稍后...</div>
    }
    return (
        <div>数据加载完成,此处显示加载后的数据</div>
    )
}
// 三元表达式
// const loadData = () => {
//     return isLoading ? <div>数据加载中,请稍后...</div> : <div>数据加载完成,此处显示加载后的数据</div>
// }
// 逻辑与运算符
const loadData = () => {
    return isLoading && <div>数据加载中,请稍后...</div>
}
const dv = (<div>{loadData()}</div>)
const title = (
    <h1>
        条件渲染:{dv}
    </h1>
)
ReactDOM.render(title, document.getElementById('root'))

JSX的列表渲染

  • 如果需要渲染一组数据,我们应该使用数组的 map () 方法
  • 注意:渲染列表的时候需要添加key属性,key属性的值要保证唯一
  • 原则:map()遍历谁,就给谁添加key属性
  • 注意:尽量避免使用索引号作为key
// 列表渲染
const songs = [
    { id: 1, name: '1' },
    { id: 2, name: '2' },
    { id: 3, name: '3' }
]
const list = (
    <ul>
        {songs.map(item => <li key={item.id} > {item.name}</li>)}
    </ul >
)
ReactDOM.render(list, document.getElementById('root'))

JSX的样式处理

  • 行内样式 ——style

在style里面我们通过对象的方式传递数据
这种方式比较的麻烦,不方便进行阅读,而且还会导致代码比较的繁琐

<h1 style={{color:'red', backgroundcolor:'skyblue'}}>
	JSX的样式处理
</h1>
  • 类名——className

创建CSS文件编写样式代码
在js中进行引入,然后设置类名即可

<h1 className="title">
	JSX的样式处理
</h1>
  • JSX是React的核心内容
  • JSX表示在JS代码中写HTML结构,是React声明式的体现
  • 使用JSX配合嵌入的JS表达式、条件渲染、列表渲染、可以描述任意UI结构
  • 推荐使用className的方式给JSX添加样式
  • React完全利用JS语言自身的能力来编写UI,而不是造轮子增强HTML功能

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

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

相关文章

Model Checking(模型检测)

1. Definition 给定一个系统和一个我们期待拥有的属性P&#xff0c; Model checking 会探索这个系统的每个状态&#xff0c;验证系统是否满足定义的性质。如果满足直接返回True,否则会给出一个反例(counter example)。如果系统被证明是正确的&#xff0c;说明该系统的所有的行…

H3C-HCL模拟器-STP生成树协议实验

一、实验拓扑图 二、实验步骤 1&#xff09;CRT连接并重命名 若遇到连接失败&#xff0c;先在HCL中启动命令行配置 2&#xff09;启动所有设备 3&#xff09;4台交换机重新命令 4&#xff09;查看信息 ① SW1的MAC地址&#xff1a;SW1是根桥 为什么SW1是根桥&#xff1f; HC…

图像坐标转换:一个点绕着另一个点逆时针旋转角度平移后的坐标

图像坐标系&#xff1a;x向右增大&#xff0c; y向下增大。 点A在图像中的坐标&#xff08;x1, y1&#xff09; 点B在图像中的坐标&#xff08;x2, y2&#xff09; 点B绕着点A逆时针旋转a弧度&#xff0c;旋转后的点B坐标为{x (x2 - x1)*cos(a) (y2 - y1)*sin(a) x1&#xf…

java基础——有多少是你不知道的?

java基础——有多少是你不知道的&#xff1f; 一、&&和||二、Integer和int三、String、StringBuffer、StringBuilder的区别四、i1<i居然是成立的&#xff1f;五、一脸懵逼的null问题六、整数除法向上取整你知道多少种&#xff1f;七、这也能运行&#xff1f; 一、&a…

QML 与 Python 交互

在 Qt 中&#xff0c;C 和 QML 交互一般有如下三种方法 上下文属性&#xff1a;setContextProperty( )向引擎注册类型&#xff1a;调用 qmlRegisterType( )QML 扩展插件&#xff1a;虽然有很大的灵活性&#xff0c;但是用 Python 创建 QML 插件比较麻烦&#xff0c;所以这种方法…

【补充:CAN卡通信的下位机-STM32cubeIDE-hal库+STMF1xx+数据发送和接收+中断接收方式+基础样例3】

【CAN卡通信的下位机-STM32cubeIDE-hal库STMF4xx数据发送和接收中断接收方式基础样例3】 1、概述2、实验环境3、问题描述4、大佬指点与解决问题5、实验效果截图6、代码连接7、细节部分8、总结 ) 1、概述 从第一篇F1和F4上采用轮询的方式调试can&#xff0c; 【CAN卡通信的下位…

如何用Jmeter进行接口测试 ,这应该是全网最详细的教程了

一、Jmeter 的使用步骤 打开Jmeter 安装包&#xff0c;进入\bin 中&#xff0c;找到"jmeter.bat", 点击打开即可。 在下图打开的Jmeter 页面中&#xff0c;右键“测试计划” -> “添加” -> "Threads(Users)" -> “线程组”&#xff0c; 建立线…

Allure安装、使用、Jenkins集成

目录 一、allure介绍 二、安装allure服务 三、安装pytest、allure-pytest 插件 四、生成报告 五、allure其他使用 5.1 给测试报告添加各种附件 5.2 添加用例标题和描述信息 5.3 添加链接 5.4 标记测试用例 5.5 优先级 六、allure和jenkins集成 一、allure介绍 all…

2023年5月青少年软件编程(图形化) 等级考试试卷(三级)

青少年软件编程&#xff08;图形化&#xff09; 等级考试试卷&#xff08;三级&#xff09; 一、 单选题(共 25 题&#xff0c; 共 50 分) 1.关于变量&#xff0c; 下列描述错误的是&#xff1f; &#xff08; &#xff09; A.只能建一个变量 B.变量可以隐藏 C.变量可以删除 D.…

【抽样调查】实验

文章目录 1、数组矩阵简单抽样&#xff08;1&#xff09;构造数组&#xff08;2&#xff09;构造矩阵&#xff08;3&#xff09;产生来自正态分布的随机数&#xff08;4&#xff09;从正态总体中抽取若干个样本&#xff08;5&#xff09;对矩阵的行或列进行统计计算 2、R软件作…

输入信号、冲激响应与卷积

输入信号与冲激响应的离散卷积 系统冲激响应&#xff1a; h ( t ) ∑ τ 0 ∞ x ( t ) δ ( t − τ ) h(t)\sum_{\tau0}^{\infty}x(t)\delta(t-\tau ) h(t)τ0∑∞​x(t)δ(t−τ) 上式中 h ( t ) h(t) h(t)是冲激信号输入到系统后系统的输出&#xff0c;也是系统对外在激…

stl容器vector笔记

Vector 一、初始化二、常用方法1. 访问元素at()、下标、data()、front()、back()2. push_back()、pop_back()尾部增删元素3. insert()在pos前插入元素&#xff0c;返回插入位置4. erase()擦除元素&#xff0c;返回擦除元素后的元素位置5. clear()清空容器6. resize()改变容器元…

C语言中函数返回数组(一维和二维)

文章目录 函数返回一维数组函数返回二维数组 C语言中函数返回数组是很重要的一种应用&#xff0c;有时候在程序中调用函数返回数组可以更容易的实现我们想要的某些操作&#xff0c;比如一次返回多个值&#xff0c;这篇文章带来的是C语言中函数返回一维数组和二维数组的例子。 函…

Python自动化测试框架我到底应该学哪一个?

企业中&#xff0c;自动化必定会演变成搭建测试框架&#xff0c;这是为什么呢&#xff1f; 可能有一些刚刚进入软件测试行业的朋友还不理解什么是测试框架&#xff0c;没关系&#xff0c;首先我们知道一点&#xff0c;为什么自动化会演变成搭建测试框架呢&#xff1f; 第一个…

Ribbon和 Nacos服务注册中心

✅作者简介&#xff1a;大家好&#xff0c;我是Cisyam&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Cisyam-Shark的博客 &#x1f49e;当前专栏&#xff1a; 微服务探索之旅 ✨特色专…

软件测试面试自己都不上心,就不要抱怨别人对你冷眼旁观

昨日表哥恳请帮他的学生投递一下开发岗的简历&#xff0c;举手之劳&#xff0c;这忙必须得帮。但当发来学生的简历后&#xff0c;我吐槽了“这简历平平无奇&#xff0c;没有任何亮点&#xff0c;如何令人另眼相看&#xff1f;”表哥说&#xff0c;学生经历不多&#xff0c;总不…

离散数学题目收集整理练习(期末过关进度20%)

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;离散数学考前复习&#xff08;知识点题&#xff09; &#x1f353;专栏&#xff1a;概率论期末速成&#xff08;一套卷&#xff09; &#x1f433;专栏&#xff1a;数字电路考前复习 ✨博主的其他文章&#xff1a;点击…

一文看懂什么是广告联盟,未来可期吗?

日常学习一些行业内的相关基础知识&#xff0c;可以在工作中更好地理解业务。在互联网广告行业中&#xff0c;广告联盟是很重要的存在&#xff0c;我们今天一起来了解下什么是广告联盟吧。 文中GG联盟广告联盟 GG广告 一. 定义 GG联盟通指网络GG联盟&#xff0c;指集合中小网…

【链表复习】C++ 链表复习及题目解析 (3)

目录 剑指offer 中的链表题目 JZ6 从尾到头打印链表 JZ18 删除链表的结点 JZ24 反转链表 JZ25 合并两个排序的链表 JZ52 两个链表的第一个公共结点 JZ23 链表中环的入口结点 JZ22 链表中倒数第k 个结点 JZ35 复杂链表的复制 JZ76 删除链表中重复的结点 本次给大家带来…

用注解实现方法开关

一、自定义注解的基本使用 java.lang.annotation 提供了四种元注解&#xff0c;专门注解其他的注解&#xff08;在自定义注解的时候&#xff0c;需要使用到元注解&#xff09;&#xff1a; Documented – 注解是否将包含在JavaDoc中 Retention – 什么时候使用该注解 Target –…