React【React是什么?、创建项目 、React组件化、 JSX语法、条件渲染、列表渲染、事件处理】(一)

news2024/11/19 1:21:38

文章目录

       React是什么?

为什么要学习React 

React开发前准备 

创建React项目 

React项目结构简介 

React组件化

初识JSX 

渲染JSX描述的页面

 JSX语法

JSX的Class与Style属性

JSX生成的React元素

条件渲染(一)

条件渲染 (二)

列表渲染

 事件处理


React是什么?

React 起源于 Facebook 的内部项目,于2013年5月公开发布。
用于构建用户界面的 JavaScript 库。

React 特点

1、声明式 − 以声明式编写 UI,我们只需要编写代码描述UI,当数据变动时 React 能高效更新并渲染合适的组件

2、JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。

3、高效 −React通过对DOM的模拟,最大限度地减少与DOM的交互。

4、组件 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。

5、单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

为什么要学习React 

1、React是目前前端最火的框架之一

2、React是目前企业技术栈中要求的知识点

3、React可以提升开发体验

4、...

React开发前准备 

 React官方参考文档:https://zh-hans.reactjs.org/

创建React项目 

使用集成的工具链,以实现最佳的用户和开发人员体验。

Create React App工具链

Create React App 是用 React 创建新应用的最佳方式,它会配置你的开发环境,以便使你能够使用最新的 JavaScript 特性,提供良好的开发体验。

npx create-react-app my-app 

温馨提示 

1、需要在你的机器上安装 Node >= 14.0.0 和 npm >= 5.6

2、项目名称不能存在大写字母,可以使用横杠(-)连接多个词汇

运行项目

项目创建完成之后,启动方式也是有他的专属方式

// 第一步:进入项目的根目录
cd my-app
// 第二步:启动项目
npm start

启动成功效果:

 VSCode快捷键

vsCode有很多针对React快捷键,这里我推荐: ES7

React/Redux/GraphQL/React-Native snippets

React项目结构简介 

 了解React项目的项目结构对我们继续开发是很有必要的

node_modules:React项目需要的依赖包,注意:此文件夹不可以移动压缩复制等操作

public:React项目静态资源文件夹,包含 index.html 入口文件、图片、 manifest.json 配置文件等

src:源码文件夹,我们开发主要在这里编写代码 

.gitignore:git忽略文件

package-lock.json:完整依赖包的信息文件

package.json:定义项目所需要的各种模块名称、版本信息等

README.md:markdown文件,项目的注释或描述文件

src 文件夹下的文件

App.css:App组件对应的css文件

App.js:App组件,主入口组件

App.test.js:App组件测试文件

index.css:index主入口文件对应css文件,也是公共css文件

logo.svg:logo图片

reportWebVitals.js:检测文件。包含三个关键指标(CLS、FID、LCP)和两个辅助指标(FCP、TTFB)

setupTests.js:测试文件,针对项目编写测试用例使用

React组件化

 组件

在React应用中,我们把一个页面看作是由一个个组件构成的。每一个组件可以包含自己的页面结构(HTML)与页面逻辑(JavaScript)

 组件化

组件化开发,带来了全新的开发体验,也带来了全新的编码方式。
在React中,构建管理自身状态的封装组件,然后对其组合以构成复杂的 UI。

由于组件逻辑使用 JavaScript 编写而非模板,因此你可以轻松地在应用中传递数据,并保持状态与 DOM 分离。
比如:App组件

初识JSX 

 JSX的作用

 我们使用JSX来实现组件中的页面结构。

什么是JSX

一个 JavaScript 的语法扩展,JSX 可以生成 React “元素”,React元素用来描述页面应该长什么样子。

 index.js

 App.js

 

渲染JSX描述的页面

 应用渲染界面的过程:

index.js

 App.js

这段jsx描述了界面长什么样子

 最终生成的页面DOM

 尝试自己写一段JSX,代替App组件的界面

<h1>hello,xiaotong</h1> 

观察最终生成的DOM结构 

 JSX语法

 最简单的一段jsx

<h1>Hello, xiaotong</h1>

在JSX中嵌入表达式

{} 大括号内放置任何有效的 JavaScript 表达式

const name = 'xiaotong';
const element = <h1>Hello, {name}</h1>;

JSX中指定属性

如果是静态值,则直接使用引号,如果是动态值,则使用 { js表达式 }

const element = <img src="https://www.baidu.com/img/flexible/logo/pc/result.png"></img>;
const avatarUrl='https://www.baidu.com/img/flexible/logo/pc/result.png'
const element = <img src={avatarUrl}></img>;

JSX子元素嵌套

<div>
  <h1>Hello!</h1>
  <h2>小童</h2>
 </div>

JSX的Class与Style属性

 设置元素的类名

提示:
在jsx中,需要将 class 修改为 className

import React, { Component } from 'react'
import "./App.css"
export default class App extends Component {
  render() {
    return (
      <div className='box'></div>
   )
 }
}
.box{
  width: 200px;
  height: 200px;
  background-color: red;
}

设置元素的style


JSX中style的值是一个对象。

import React, { Component } from 'react'
export default class App extends Component
{
  render() {
    return (
      <div style={{
            width:"200px",height:"200px",background:"green" }}></div>
   )
 }
}

JSX生成的React元素

 1、JSX最终生成一个React元素。

const element=<h1 className="con">hello,xiaotong</h1>

JSX被编译后变成这样一段JS代码:

const element = React.createElement(
 'h1', {className: 'con'},'hello,xiaotong'
);

React.createElement 返回的对象长这个样子,这个对象用来描述界面应该长什么样子,我们就把这个对象称为 React元素 。

//简化版
const element = {
 type: 'h1',
 props: {
   className: 'con',
   children: 'hello,baizhan'
 }
};

可以打印一下,查看完整的React元素

console.log(<h1 className="con">hello,xiaotong</h1>)

 之后 React DOM 会根据这个对象描述的信息生成 真正的DOM元素

条件渲染(一)

 我们可以根据不同的条件,渲染不同的界面。

1、使用 if

const flag=true
 if(flag){
  return <div>生存吧</div>
}
 return <div>毁灭吧</div>

2、三目运算符 condition ? true : false

const flag = true
return flag ? <div>生存吧</div> : <div>毁灭吧</div>

或者

const flag = true
const element=flag ? <div>生存吧</div> : <div>毁灭吧</div>
return element

条件渲染 (二)

 1、与运算符 &&

const flag=true
return flag && <div>生存吧</div>
const flag=true
return <div> {flag && "生存吧"} </div>

提示:
JavaScript 中, true && expression 总是会返回 expression , 而 false && expression 总是会返回 false
因此,如果条件是 true && 右侧的元素就会被渲染,如果是 falseReact 会忽略并跳过它。

2、使用 null 

如果返回 null ,则React什么都不渲染

const flag=true
return {flag ?<div>生存吧</div> :null}

列表渲染

 列表是页面常见的展示效果

 可以通过使用 {} 在 JSX 内构建一个元素集合。

return  <ul>
 {["前端团队","后端团队","设计团队"].map((item,index) =>{
         return <li key={ index }>{ item } </li>
    })
 }
  </ul>

复杂数据列表渲染

const list = [
 {
   "id": 2208287,
   "desc": "鄞州:家有富矿,博物馆的美好力量,你get到了吗? “21世纪的博物馆拥有巨大的",
   "title": "果小桃"
 },
 {
   "id": 2208760,
   "desc": "梅里雪山北坡|我的第二次重装徒步·附攻略1 篇1? \t 字数限制🚫详细攻略会分",
   "title": "小蘑猪zcy"
 },
 {
   "id": 2208882,
   "desc": "☀ 巴塞罗那观赏日落的好去处 巴塞罗那,一座地中海城市,融合了罗马、中世纪的风格",
   "title": "Go旅城通票"
 }
]
 return <ul>
 {
   list.map((item, index) => {
    return (
     <li key={item.id}>
      <h3>{item.title}</h3>
      <p>{item.desc}</p>
     </li>
   )
  })
 }
 </ul>

提示:
key 帮助 React 识别哪些元素改变了,比如被添加或删除。因此你应当给数组中的每一个元素赋予一个确定的标识。

 事件处理

 React 元素的事件处理和 DOM 元素的很相似,但是有一点语法上的不同:

1、React 事件的命名采用小驼峰式(camelCase),而不是纯小写。
2、使用 JSX 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。

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

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

相关文章

浅谈卫星通信技术

目录 1.卫星的概念 2.卫星的具体作用 3.利用卫星进行通信的优势 4.卫星通信带来的技术变革 1.卫星的概念 卫星是指在地球轨道上运行的天体或人造物体。一般来说&#xff0c;我们所说的卫星主要指人造卫星&#xff0c;它是由人类设计、制造并送入轨道的人造宇宙飞行器。 人造…

海思SS528V100 开发环境搭建记录

1.拿到厂家的SDK 解压rar压缩包(aarch64-mix210-linux.tga 要用tar -zxvf命令解压)之后会得到三个文件夹 如下图高亮了 2.安装交叉编译工具链 tar -zxf aarch64-mix210-linux.tgz 解压文件&#xff0c;进入 aarch64-mix210-linux 目录&#xff0c;运行 chmod x aarch64-mix2…

如何实现Python自动化测试

Python自动化测试常用于Web应用、移动应用、桌面应用等的测试&#xff0c;在这我也准备了一份软件测试面试视频教程&#xff08;含接口、自动化、性能等&#xff09;&#xff0c;需要的可以直接在下方观看&#xff0c;你也直接点击文末小卡片免费领取资料文档 软件测试面试视频…

clion +espidf 搭建开发环境

1.离线安装esp32idf的环境后&#xff0c;将idf_frameworks的路径添加至环境变量如下图所示 2.打开powershell&#xff0c;输入export.ps1&#xff0c;如图所示 3.输入$env:Path&#xff0c;并将导出的环境变量复制到clion environment中 建立环境变量 如图所示

Jmeter性能综合实战 —— 签到及批量签到

提取性能测试的三个方面&#xff1a;核心、高频、基础功能 签 到 请 求 步 骤 1、准备工作&#xff1a; 签到线程组n HTTP请求默认值n HTTP cookie 管理器n 首页访问请求n 登录请求n 查看结果树n 调试取样器l HTTP代理服务器 &#xff08;1&#xff09;创建线程组 &#xf…

【python爬虫】中央气象局预报—静态网页图像爬取练习

静态网页爬取练习 中央气象局预报简介前期准备步骤Python爬取每日预报结果—以降水为例 中央气象局预报简介 中央气象台是中国气象局&#xff08;中央气象台&#xff09;发布的七天降水预报页面。这个页面提供了未来一周内各地区的降水预报情况&#xff0c;帮助人们了解即将到来…

TikTok墨西哥首场大促来袭!9月18日正式开启

TikTok目前在墨西哥拥有超过5750万活跃用户&#xff0c;2022年是下载量最高的App&#xff0c;新增了近1100万个用户&#xff0c;增长率超过了25%&#xff0c;在极短的时间里迅速成为了最受墨西哥人&#xff0c;尤其是年轻用户喜欢的应用程序之一&#xff0c;在所有社媒中的渗透…

博途1200脉冲输出控制速度轴(轴工艺对象基本配置)

这里的1200脉冲轴,主要用来完成线缆包材绕包时的重叠率控制。关于重叠率的具体概念,这里不再阐述,大家可以看下面的文章链接, 重叠率控制 重叠率控制(算法详细介绍含SCL和梯形图源代码)_RXXW_Dor的博客-CSDN博客产品包装和线缆保护材料的包覆都需要进行材料包装重叠率的控…

JavaScript常见缓存数据处理方式 并说明特性

在JavaScript中&#xff0c;常见的几种缓存数据的方式: 1、LocalStorage&#xff1a;使用LocalStorage可以将数据以键值对的形式存储在浏览器中&#xff0c;该数据在页面刷新后依然存在&#xff0c;只要不更换浏览器 或 清空缓存 这种缓存就会一直存在 我们执行 localStorage…

java错误处理百科

一、业务开发缺陷 ① 工期紧、逻辑复杂&#xff0c;开发人员会更多地考虑主流程逻辑的正确实现&#xff0c;忽略非主流程逻辑&#xff0c;或保障、补偿、一致性逻辑的实现&#xff1b; ② 往往缺乏详细的设计、监控和容量规划的闭环&#xff0c;结果就是随着业务发展出现各种各…

前端基础---HTML笔记汇总一

HTML定义 HTML超文本标记语言——HyperText Markup Language。 超文本是什么&#xff1f; 链接标记是什么&#xff1f; 标记也叫标签&#xff0c;带尖括号的文本 标签分类 单标签:只有开始标签&#xff0c;没有结束标签(<br>换行 <hr>水平线 <img> 图像标…

K8S-集群管理

目录 一、pod资源限制&#xff08;resources&#xff09; 二、重启策略&#xff08;restartPolicy&#xff09; 三、扩容缩容 1.手动扩容 2.自动扩容 2.1、数据采集组件 2.1.1、部署 2.2、HPA 2.2.1、案例 2.2.1.1、HPA基于cpu自动扩缩容 2.2.1.2、HPA基于内存自动扩…

透过源码理解Flutter InheritedWidget

InheritedWidget的核心是保存值和保存使用这个值的widget&#xff0c;通过对比值的变化&#xff0c;来决定是否要通知那些使用了这个值的widget更新自身。 1 updateShouldNotify和notifyClients InheritedWidget通过updateShouldNotify函数控制依赖其的子组件是否在Inherited…

[Android AIDL] --- AIDL工程搭建

0 AIDL概念 AIDL&#xff08;Android Interface Definition Language&#xff09;是一种 IDL 语言&#xff0c;用于生成可以在 Android 设备上两个进程之间进行进程间通信&#xff08;IPC&#xff09;的代码。 通过 AIDL&#xff0c;可以在一个进程中获取另一个进程的数据和调…

视频汇聚/视频云存储/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?

开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

idea自定义提示关键词 switch

idea中希望提示Switch case的快捷键&#xff0c; 比如我想自定义一个输入【mmm】就提示main方法&#xff0c;该怎么做&#xff1f; 1.File - Settings&#xff0c;点击。 2.找Live Templates &#xff0c;可以在搜索里面搜live&#xff0c;找到后点击。 3.先点击号&#xff…

系统架构设计师-计算机系统基础知识(2)

目录 一、存储管理 1、页式存储 2、段式存储 3、段页式存储 二、磁盘管理 1、先来先服务FCFS 2、最短寻道时间优先SSTF 三、文件系统 1、文件基本概念 2、文件的类型&#xff1a; 3、索引文件结构 4、位示图 一、存储管理 1、页式存储 将程序与内存划分为同样大小的块&…

算法面试-深度学习面试题整理(2024.8.29开始,每天下午持续更新....)

一、无监督相关&#xff08;聚类、异常检测&#xff09; 1、常见的距离度量方法有哪些&#xff1f;写一下距离计算公式。 1&#xff09;连续数据的距离计算&#xff1a; 闵可夫斯基距离家族&#xff1a; 当p 1时&#xff0c;为曼哈顿距离&#xff1b;p 2时&#xff0c;为欧…

C++中的 class和struct区别

C 中保留了C语言的 struct 关键字&#xff0c;并且加以扩充。在C语言中&#xff0c;struct 只能包含成员变量&#xff0c;不能包含成员函数。而在C中&#xff0c;struct 类似于 class&#xff0c;既可以包含成员变量&#xff0c;又可以包含成员函数。 C中的 struct 和 class 基…

领英采用 Protobuf 进行微服务开发,网络延迟降低60%

领英采用 Protobuf&#xff0c;以实现其各类平台中更为高效的微服务间数据传递&#xff0c;并将其与开源框架 Rest.li 相集成。在全公司范围的推广完成后&#xff0c;领英将延迟降低了 60%的同时&#xff0c;也提高了资源的利用率。 领英平台所采用的是微服务架构&#xff0c;…