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

文章目录

       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 语法时你需要传入一个函数作为事件处理函数,而不是一个字符串。

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

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

相关文章

Gorilla LLM:连接海量 API 的大型语言模型

如果你对这篇文章感兴趣&#xff0c;而且你想要了解更多关于AI领域的实战技巧&#xff0c;可以关注「技术狂潮AI」公众号。在这里&#xff0c;你可以看到最新最热的AIGC领域的干货文章和案例实战教程。 一、前言 在当今这个数字化时代&#xff0c;大型语言模型&#xff08;LLM…

LeetCode--HOT100题(41)

目录 题目描述&#xff1a;102. 二叉树的层序遍历&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;102. 二叉树的层序遍历&#xff08;中等&#xff09; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&am…

【LeetCode】28 . 找出字符串中第一个匹配项的下标

28 . 找出字符串中第一个匹配项的下标&#xff08;简单&#xff09; 方法&#xff1a;双指针法 思路 使用 find 函数枚举原串 ss 中的每个字符作为「发起点」&#xff0c;每次从原串的「发起点」和匹配串的「首位」开始尝试匹配&#xff1a; 匹配成功&#xff1a;返回本次匹配…

leetcode 739. 每日温度

2023.8.28 本题用暴力双层for循环解会超时&#xff0c;所以使用单调栈来解决&#xff0c;本质上是用空间换时间。维护一个单调递减栈&#xff0c;存储的是数组的下标。 代码如下&#xff1a; class Solution { public:vector<int> dailyTemperatures(vector<int>&…

YOLOv5引入FasterNet主干网络,目标检测速度提升明显

目录 一、背景介绍1.1 目标检测算法简介1.2 YOLOv5简介及发展历程 二、主干网络选择的重要性2.1 主干网络在目标检测中的作用2.2 YOLOv5使用的默认主干网络 三、FasterNet简介与原理解析3.1 FasterNet概述3.2 FasterNet的网络结构3.2.1 基础网络模块3.2.2 快速特征融合模块3.2.…

uniapp项目实战系列(1):导入数据库,启动后端服务,开启代码托管

目录 前言前期准备1.数据库的导入2.运行后端服务2.1数据库的后端配置2.2后端服务下载依赖&#xff0c;第三方库2.3启动后端服务 3.开启gitcode代码托管 ✨ 原创不易&#xff0c;还希望各位大佬支持一下&#xff01; &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&…

网络编程 http 相关基础概念

文章目录 表单是什么http请求是什么http请求的结构和说明关于http方法 GET和POST区别http常见状态码http响应http 请求是无状态的含义html是什么 &#xff08;前端内容&#xff0c;了解即可&#xff09;html 常见标签 &#xff08;前端内容&#xff0c;了解即可&#xff09;关于…

Android | 关于 OOM 的那些事儿

作者&#xff1a;345丶 前言 Android 系统对每个app都会有一个最大的内存限制&#xff0c;如果超出这个限制&#xff0c;就会抛出 OOM&#xff0c;也就是Out Of Memory 。本质上是抛出的一个异常&#xff0c;一般是在内存超出限制之后抛出的。最为常见的 OOM 就是内存泄露(大量…

SAP_ABAP_OO_ALV案例

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型https://blog.csdn.net/java_zhong1990/article/details/132469977 一、OO_ ALV ,面向对象开发ALV报表 基于对收款清账平台的开发&#xff0c;解释 OO_ALV开发的程序结构与代码模板参考 1.1 代…

Unity血条制作

一、使用UGUI制作血条 我一般使用image制作血条&#xff0c;当然&#xff0c;也可以使用滑动组件Slider。image的具体操作步骤如下 普通血条 1、在Hierarchy面板中&#xff0c;创建两个image组件&#xff0c;将其中一个设置为另外一个的子节点 2、在Inspector面板中&#…

fatal: ServicePointManager 不支持具有 socks5 方案的代理。

报错 解决前 git config --global --list 查看git的设置 解决后 // 代理更改为http (7890是我的代理软件clash的port默认的&#xff0c;有些博客使用的是1080&#xff0c;依个人情况而定) git config --global http.proxy http://127.0.0.1:7890 git config --global https…

Android——基本控件(下)(十九)

1. 菜单&#xff1a;Menu 1.1 知识点 &#xff08;1&#xff09;掌握Android中菜单的使用&#xff1b; &#xff08;2&#xff09;掌握选项菜单&#xff08;OptionsMenu&#xff09;的使用&#xff1b; &#xff08;3&#xff09;掌握上下文菜单&#xff08;ContextMenu&am…

No message found under code ‘-1‘ for locale ‘zh_CN‘.

导出中的报错&#xff1a;No message found under code -1 for locale zh_CN. 报错原因&#xff1a;页面中展示的数据和后端excel中的数据不一致导致 具体原因&#xff1a;

14-数据结构-二叉树的创建以及前中后遍历,以及结点和叶子节点的计算(C语言)

概述&#xff1a; 二叉树&#xff0c;这里采用孩子链表存储法&#xff0c;即一个数据域和两个左右孩子指针域。随后递归进行遍历即可。在创建二叉树的时候&#xff0c;先创建各个二叉树结点&#xff08;这里的结点采用动态分配&#xff0c;因此结点为指针变量&#xff09;&…

为什么说计算机科学与计算机无关, 什么是真正的计算机科学?

什么是计算机科学呢? 我们可能很容易望文生义地理解为"不就是关于计算机的科学吗? "然而一位来自 MIT 计算机系的教授认为"计算机科学"不但不是科学, 而且而且还跟计算机无关!这是怎么回事呢? 视频链接见这里. 下面我们就来分享一下他对于计算机科学的看…

vue拖拽div盒子实现上下拖动互换

vue拖拽div盒子实现上下拖动互换 <div v-for"(item, index) in formList" :key"index" draggable"true"dragstart"handleDragStart($event, item)"dragenter"handleDragEnter($event, item)"dragover.prevent"han…

C语言_分支和循环语句(2)

文章目录 前言一、for 循环1.1语法1.2 for 语句的循环控制变量1.3 一些 for 循环的变种 二、do ... while()循环2.1 do 语句的语法2.2 do ... while 循环中的 break 和 continue2.3 练习1 **- 计算n的阶乘**2. - **在一个有序数组中查找具体的某个数字 n** 二分查找算法&#x…

matlab使用教程(28)—微分方程(ODE)求解常见问题

1.非负 ODE 解 本博客说明如何将 ODE 解约束为非负解。施加非负约束不一定总是可有可无&#xff0c;在某些情况下&#xff0c;由于方程的物理解释或解性质的原因&#xff0c;可能有必要施加非负约束。仅在必要时对解施加此约束&#xff0c;例如不这样做积分就会失败或者解将不…

华纳云:ubuntu下nginx服务器如何配置

在Ubuntu操作系统上配置Nginx服务器涉及以下步骤。这里我将提供一个基本的配置示例&#xff0c;你可以根据自己的需求进行修改和定制。 安装 Nginx&#xff1a; 打开终端&#xff0c;并输入以下命令来安装 Nginx&#xff1a; sudo apt update sudo apt install nginx 启动 …

SSL核心概念 SSL类型级别

SSL&#xff1a;SSL&#xff08;Secure Sockets Layer&#xff09;即安全套接层&#xff0c;及其继任者传输层安全&#xff08;Transport Layer Security&#xff0c;TLS&#xff09;是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。 H…