react基础语法,模板语法,ui渲染,jsx,useState状态管理
创建一个react应用
这里使用create-react-app的脚手架构建项目(结构简洁,基于webpack-cli),
npx create-react-app [项目名称]
使用其他脚手架构建项目可以参考:react框架,使用vite和nextjs构建react项目_vite + react+js项目构建-CSDN博客
成功构建后只需要关注两个部分,package.json中的script脚本,start:启动项目
src中的核心文件,index.js: 引入react的依赖, App.js:根组件
可以先去除多余的文件
index.js
import React from 'react'; // 引入React库
import ReactDOM from 'react-dom/client'; // 引入ReactDOM库
import App from './App'; // 引入App组件const root = ReactDOM.createRoot(document.getElementById('root')); // 创建根节点
root.render(// 严格模式,排错<React.StrictMode><App /></React.StrictMode>
);
app.js
function App() {return (<div className="App"><h1>react基本语法</h1></div>);
}export default App;
以上是精简后的文件目录和文件内容,可以看出核心的引入库为react和react-dom,整个框架也是完全基于js生成的
模板语法
模板语法就是在html结构中使用js变量渲染数据,
function App() {const title = '标题'return (<div className="App"><h1>react基本语法</h1><span>{title}</span></div>);
}export default App;
我们在App组件(函数)定义一个变量,并使用{}插入html结构中,{}的功能就是将html环境转换成js环境 ,
出来再标签外插值,还可以再标签内设置属性,最终都会变成html的结构
function App() {const title = '标题'const box = 'box'return (<div className="App"><h1>react基本语法</h1><span>{title}</span><div className={box} style={{width: '100px', height: '100px', backgroundColor: 'red'}}></div></div>);
}export default App;
组件渲染时要注意的几点:
- 一个组件中返回的html结构只能有一个外标签,可以使用<div></div>,<></>,它们的区别是一个最终会被div包裹,一个则不会有任何标签再外圈(template)
- 对标签元素设置类时使用className而不是class(防止和es6的class关键字搞混)
- 插入对象时使用{{}},这表示{}中插入的时对象,最常用的就是style属性
列表渲染和条件渲染
function App() {const title = '标题'const box = 'box'const listData = [1, 2, 3, 4, 5]const list = listData.map(item=>(<li key={item}>{item}</li>))return (<div className="App"><h1>react基本语法</h1><span>{title}</span><div className={box} style={{width: '100px', height: '100px', backgroundColor: 'red'}}></div>{list}</div>);
}export default App;
使用数组中的数据进行列表循环渲染时,使用map方法,map方法有返回值,可以将html的结构返回出来直接插入到组件的渲染结构中(虚拟节点),
function App() {const title = '标题'const box = 'box'const listData = [1, 2, 3, 4, 5]const list = listData.map(item=>(<li key={item}>{item}</li>))let show = falselet content = <span>{show?'这是条件为真的内容':'这是条件为假的内容'}</span>return (<div className="App"><h1>react基本语法</h1><span>{title}</span><div className={box} style={{width: '100px', height: '100px', backgroundColor: 'red'}}></div>{list}{content}</div>);
}export default App;
当show为true和false时,span中的内容会相应发生改变,
可以看出在react中循环和条件都是基于原生js的方法实现的
jsx
jsx语法是js和XML结合的语法,它允许再js中使用类似Html的标签元素作为值,类似于数字,字符串,要注意jsx的标签并不是字符串,所以复制时不需要添加引号,同时使用return返回jsx的标签时,要使用()包裹,因为不使用()js的语法会认为再return这一行函数就结束了,不会读取到后续内容
let content = <span>{show?'这是条件为真的内容':'这是条件为假的内容'}</span>
return (<div className="App"><h1>react基本语法</h1><span>{title}</span><div className={box} style={{width: '100px', height: '100px', backgroundColor: 'red'}}></div>{list}{content}</div>);
同时你也可以将文件改成jsx后缀,因为react集成了jsx语法,所以使用js也可以成功识别出jsx
状态管理
这里用上了一个hooks钩子函数 ,useState,
const [show, setShow] = useState(false)
它接受一个任意值,返回一个数组,里面包含一个由任意值生成的响应式变量,和这个响应式变量的修改方法,
比如上面修改的show变量,使用useState接受false布尔值,复制给show,同时生成setShow方法用来重新赋值show,因为show是只读的不可被直接修改,
import { useState } from "react"function App() {const title = '标题'const box = 'box'const listData = [1, 2, 3, 4, 5]const list = listData.map(item=>(<li key={item}>{item}</li>))const [show, setShow] = useState(false)let content = <span>{show?'这是条件为真的内容':'这是条件为假的内容'}</span>function fn() {setShow(!show)}return (<div className="App"><h1>react基本语法</h1><span>{title}</span><div className={box} style={{width: '100px', height: '100px', backgroundColor: 'red'}}></div>{list}<button onClick={fn}>click</button>{content}</div>);
}export default App;
此时点击按钮,会改变文字内容
注意:onclick接受一个函数名或者函数体,接受函数名时不能带括号,如果需要传参应该写成函数体的格式
<button onClick={()=>fn()}>click</button>
到这里react的基本语法就全部展示完了
相关文章:

react基础语法,模板语法,ui渲染,jsx,useState状态管理
创建一个react应用 这里使用create-react-app的脚手架构建项目(结构简洁,基于webpack-cli), npx create-react-app [项目名称] 使用其他脚手架构建项目可以参考:react框架,使用vite和nextjs构建react项目…...

OJ-0710
示例1 input 4 100 200 300 5001 21 32 4output700100 200 500 300 示例2 input 4 100 200 300 500 1 2 1 3 1 4output1100100 200500300 示例3 input 6 100 200 300 400 300 550 1 2 1 3 1 4 2 5 2 6output1050100 200 300600 300400 import java.util.ArrayList; im…...

人工智能在自动驾驶中的目标检测研究
摘要 随着自动驾驶技术的快速发展,视觉识别作为核心技术之一,扮演着至关重要的角色。本文旨在探讨人工智能如何通过视觉识别在自动驾驶中进行目标检测。我们将详细讨论目标检测的基本原理、常用算法、最新进展、已有的开源项目及其在自动驾驶中的应用和…...

【合并两个有序数组】
合并两个有序数组 一、题目二、普通解法三、双指针 一、题目 二、普通解法 先合并后排序 补充:js合并数组方法详见https://blog.csdn.net/ACCPluzhiqi/article/details/131702269?fromshareblogdetail js排序方法见http://t.csdnimg.cn/wVCOP 时间复杂度:O(mn)…...

链表 OJ(一)
移除链表元素 题目连接: https://leetcode.cn/problems/remove-linked-list-elements/description/ 使用双指针法,开始时,一个指针指向头节点,另一个指针指向头节点的下一个结点,然后开始遍历链表删除结点。 这里要注…...

《Linux与Windows文件系统的区别》
Linux与Windows文件系统的区别 在计算机操作系统领域,Linux和Windows是两种广泛使用的操作系统,它们在文件系统方面有许多显著的差异。这篇博客将详细介绍这两种操作系统文件系统的区别,帮助读者更好地理解它们各自的特点和优势。 类别Linu…...

批量修改Git历史commit信息中的username
之前很长一段时间GitHub上的提交都在使用工作账户, 导致私人仓库中的提交者比较混乱. 在StackOver里面找到了一个bash脚本可以批量修改username, 在这里记录一下. 修改的步骤一共两步: 执行修改脚本将本地修改同步到Git服务器 首先我们来看脚本: #!/bin/shgit filter-branch…...

LabVIEW与ABB工业机器人据监控
1. 前言 随着工业自动化的发展,工业机器人在制造业中的应用越来越广泛。为了实现对工业机器人的高效监控和控制,本文介绍了利用OPC(OLE for Process Control)服务器将ABB工业机器人与LabVIEW连接起来的解决方案。通过OPC服务器…...

c++栈内存和堆内存的基本使用
c栈内存和堆内存的基本使用 #include <iostream>// 定义一个简单的结构体 struct Person {std::string name;int age; };int main() {// 栈内存分配int a 10; // 基本数据类型的栈内存分配Person person; // 结构体的栈内存分配person.name "John";person.a…...

快速入门,springboot知识点汇总
学习 springboot 应该像学习一门编程语言一样,首先要熟练掌握常用的知识,而对于不常用的内容可以简单了解一下。先对整个框架和语言有一个大致的轮廓,然后再逐步补充细节。 前序: Spring Boot 通过简化配置和提供开箱即用的特性,…...

Ubuntu20.04系统非root用户安装GAMIT10.71
(测试环境:20240701升级包和20240701数据,解算通过) QQ:8212714 群:302883438群文件(source安装包20240701升级包) 1、首先在计算机中安装VMware Workstation 16 Pro。建议:分配…...

stm32 开发板可以拿来做什么?
STM32开发板可以用来做许多不同的事情,具体取决于您的应用需求和编程能力。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学,敲个22就可…...

latex英文转中文word,及一些latex相关工具分享
前言:想要转换latex生成的英文pdf文件为中文word文件 一、主要步骤 1、文字翻译:直接使用谷歌翻译等辅助将英文翻译成中文即可; 支持英文pdf文件全文翻译,再用迅捷PDF转换器之类的转成word,再手动调整。 https://app…...

EasyOCR: 简单易用的多语言OCR工具
EasyOCR: 简单易用的多语言OCR工具 1. 什么是EasyOCR?2. 使用场景3. 基本使用方法安装示例代码代码解释 4. 结语 1. 什么是EasyOCR? EasyOCR是一个基于Python的开源光学字符识别(OCR)工具,它支持80多种语言的文本识别。该项目由JaidedAI开发,旨在提供一个简单易用但功能强大…...

arm架构安装chrome
在ARM架构设备上安装谷歌软件或应用通常涉及到几个步骤,这取决于你要安装的具体谷歌产品,比如谷歌浏览器、Google Play服务或者是其他谷歌开发的软件。下面我会给出一些常见的指导步骤,以安装谷歌浏览器为例: 在Linux ARM64上安装…...

ETAS工具导入Com Arxml修改步骤
文章目录 前言Confgen之前的更改Confgen之后的修改CANCanIfComComMEcuM修改CanNmCanSMDCMCanTp生成RTE过程报错修改DEXT-诊断文件修改Extract问题总结前言 通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml…...

Apache Kylin模型构建全解析:深入理解大数据的多维分析
引言 Apache Kylin是一个开源的分布式分析引擎,旨在为大数据提供快速的多维分析能力。它通过预计算技术,将数据转化为立方体模型(Cube),从而实现对Hadoop大数据集的秒级查询响应。本文将详细介绍Kylin中模型构建的全过…...

element-plus的文件上传组件el-upload
el-upload组件 支持多种风格,如文件列表,图片,图片卡片,支持多种事件,预览,删除,上传成功,上传中等钩子。 file-list:上传的文件集合,一定要用v-model:file-…...

等保测评视角下的哈尔滨智慧城市安全框架构建
随着智慧城市的兴起,哈尔滨作为东北地区的重要城市,正在积极探索和实践智慧城市安全框架的构建,以确保在数字化转型的过程中,既能享受科技带来的便利,又能有效防范和应对各类网络安全风险。 本文将从等保测评的视角出…...

Java中的数据缓存技术及其应用
Java中的数据缓存技术及其应用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代应用程序中,数据缓存是一种重要的技术手段,用于提…...

SQL 索引
一、索引的基本概念 **索引(Index)**是数据库中一种特殊的数据结构,用于帮助数据库管理系统(DBMS)快速访问数据表中的特定信息。索引类似于书籍的目录,可以加快数据检索的速度。 二、索引的作用 提高查询…...

free第一次成功,第二次失败
问题描述: 在一个函数中存在free,第一次进入此函数没有问题,但是第二次出错 strncpy(pdd_all_data[i].sensor_name,white_list[j].dev_name,strlen(pdd_all_data[i].sensor_name)); 上面代码都是使用strncpy不小心导致double free or corrup…...

各种音频处理器
在HiFi(高保真)音频系统中,通常需要使用一些特定类型的音频处理器,以确保音频信号的高保真和优质输出。以下是一些常见的音频处理器类型及其在HiFi系统中的应用: DAC(数模转换器): …...

深度学习探秘:Transformer模型跨框架实现大比拼
深度学习探秘:Transformer模型跨框架实现大比拼 自2017年Transformer模型问世以来,它在自然语言处理(NLP)领域引发了一场革命。其独特的自注意力机制为处理序列数据提供了全新的视角。随着深度学习框架的不断发展,Tra…...

京准电钟:云计算中NTP网络时间服务器的作用是什么?
京准电钟:云计算中NTP网络时间服务器的作用是什么? 京准电钟:云计算中NTP网络时间服务器的作用是什么? NTP是一种用于同步网络中设备时间的协议,广泛用于互联网和局域网中。NTP网络时间服务器则是基于NTP协议构建&…...

Apache中使用CGI
Apache24 使用Visual Studio 2022 // CGI2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdio.h> #include <stdlib.h>#include <stdio.h>void main() {//设置HTML语言printf("Content-type:text/html\n\n&q…...

宏任务与微任务对比【前端异步】
目录 简介微任务与宏任务的基本概念宏任务(Macrotasks)微任务(Microtasks)宏任务示例微任务示例微任务与宏任务的执行时序 结论 简介 在JavaScript的异步编程中,理解事件循环(Event Loop)是至关…...

Autogen和LangGraph对比
AutoGen和LangGraph是两种用于构建多代理AI系统的框架,它们各有特点和优势。以下是对这两个框架的详细对比: 共同点 都支持创建多个AI代理进行协作都可以与大语言模型(LLM)集成都允许定义代理之间的交互流程都支持使用工具和外部资源来增强代理能力 AutoGen的特点 灵活的代…...

uniapp vue3微信小程序如何获取dom元素
在网上很多人说可以通过下面两种形式获取到指定dom元素 // 定义ref <div ref"box"></div>//1通过this.$refs获取dom元素 this.$refs.box//2通过ref(null)获取dom元素 let box ref(null)第一种方式在vue2中是可以获取到的,但是在vue3 setup中…...

Mongodb索引使用限制
学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第85篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…...