第一个React程序

embedded/2024/9/22 14:54:30/

虽然跟着网上的视频,但是都是几年前的教学视频了,于是就在视频的引导下,自己使用vite脚手架建立一个React项目。

首先来到vite官网:

和当时建立vue项目一样,使用该命令创建,只是后面选择框架时选择react,

然后选择语言后,进行npm i 安装相关依赖包后,使用命令npm run deve即可,出现如下界面

网上教程可能随着react版本介绍的目录结构会不同,目前最新版react18 +vite项目的目录结构如下:

 

这里需要吐槽一下,看的视频让我把src下的文件全部删除,这里千万不能全部删除,除非是有经验的,第一次学习react项目就别乱删,要不是再次重新建了一个react项目,就被那些老教程舞蹈了。简单介绍一下区别

以前的入口文件是以index命名的js文件,但是现在不是了,而是根据index.html引入的文件为入口文件。

 一般来说这种都是最基础的,vite文档一般也不会写这些东西。

可以看到,入口文件是/src文件夹下的main.tsx.

tsx也没啥特别的,也是ts的一种,只是ts的一个扩展后缀,多了些功能,具体区别搜一下就能知道,目前来说,对于写demo来说,你写ts后缀和tsx后缀差别不大。

下面来看main.tsx文件

这里要看到,这里的方式和以前的react版本的方式有所不同,特别是render那一块

javascript">//以前的方式
ReactDOM.render(HTML代码,document.getElementById("root"))

 这种方式虽然来说目前还能用,但是在运行时会出现警告,会告诉你这样用法的render函数已被弃用(说是这样说,但是还是能执行)。

所以说,最好还是用vite给你提供的这种最新的方式来书写。

上面的StrictMode会js的都应该知道,这里对应的就是react的严格模式。

然后在入口文件,渲染的就是App组件的内容。以后书写组件化或者其他方式,请以这样的方式进行书写,就不怎么修改这个入口文件了。

来到APP.vue,去去去,应该是App.tsx

这里就是默认界面显示的代码了,这里如果刚入门就都删了就可以了,然后使用快捷方式创建模板代码就行了。(输入rafc)

自动生成一下模板代码:

 想要使用此快捷方式就需要安装插件:

就是框选的第一个就是,下面的也是比较常用的插件,一并安装即可,想知道是干啥的直接从网上也可以找到。

行了,这样就完成了基本的第一个react程序。还有就是react和vue不一样,你要写样式的话就建立一个css文件即可,和你的tsx文件或ts文件的文件名命名一样即可,还有就是你的组件的命名一定要首字母大写,以及写类名的时候要写成className而不是class,这是因为react考虑是和class类这个关键字冲突。还有就是和vue的区别就是vue是插值语法{{  }}双大括号这样,而react的{}这样的对象括号的形式.......暂时想不了太多了,会持续更新的。

最后,贴上自己按照教程写的一个demo

App.tsx

javascript">import "./App.css"
import { Home } from "./components/Home/home"
import { Login } from "./components/login/Login"
import { useState } from "react"const clickHandler=(event:any)=>{alert('我是app中的外部函数')// event.preventDefault():阻止默认行为//event.stopPropagation():阻止事件冒泡// 在react当中,无法通过return false来取消默认行为// 需要使用事件对象// 事件对象// react当其中的事件对象不是原生的事件对象,是经过react包装过的对象// 由于对象经过包装,所以使用过程中我们无需再去考虑兼容性问题
}
function App(){const res=useState(1)// let counter=res[0]// let setCounter=res[1]let [counter,setCounter]=resconst arr=[{name:'zhangsan',age:18},{name:'lisi',age:19},{name:'wangwu',age:20}]
//将数据放入tsx中
const logData=arr.map((item,index)=><Login key={index} data={item.name} age={item.age}/>)
const addHandler=()=>{//点击后数字加一setCounter(prevCounter => prevCounter + 1);console.log(counter)
}
const subHandler=()=>{//点击后数字减一setCounter(prevCounter => prevCounter - 1);console.log(counter)
}return (<div className="tip">Hello World<div className="name" onClick={()=>{alert(123)}}>学习React</div><div className="name" onClick={clickHandler}>学习React2</div>{logData}<Home counter={counter} add={addHandler} sub={subHandler}></Home>{/* 在父组件中可以直接在子组件中设置属性 */}{/* <Login test="123" fn={()=>{}} data={arr[0].name}/> */}{/* 同样存在事件的冒泡 */}</div>)}export default App;

 Home.tsx

javascript">import React from 'react'export const Home = (props:any) => {return (<div><div>{props.counter}</div><button onClick={props.sub}>-</button><button onClick={props.add}>+</button></div>)
}


http://www.ppmy.cn/embedded/108536.html

相关文章

Linux系统之实现dhcp功能(Implementation of DHCP Function in Linux System)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

checksum 与 CRC的不同之处

实际应用&#xff1a; CRC&#xff1a;在外发电压时&#xff0c;在报文的最后两个字节做了CRC计算。 checksum &#xff1a; 在按键状态外发&#xff0c;在报文的最后一个字节做了checksum计算。 它们的共同之处&#xff1a;目的都是为了数据的错误检测功能。 只是在算法的…

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算 add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加…

坐牢第三十五天(c++)

一.作业 1.使用模版类自定义栈 代码&#xff1a; #include <iostream> using namespace std; template<typename T> // 封装一个栈 class stcak { private:T *data; //int max_size; // 最大容量int top; // 下标 public:// 无参构造函数stcak();// 有参…

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集&#xff08;Garbage Collection&#xff0c;GC&#xff09;机制是Java语言的一大特色&#xff0c;它负责自动管理内存的回收&#xff0c;释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍&#xff1a; 一、垃圾收集机制概述&#xff1a; …

鸿蒙双向认证

鸿蒙双向认证 开发环境 基于API12 参考文档 切换到鸿蒙也要用上双向认证。使用的其中的 rcp 功能&#xff0c;详细文档https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/remote-communication-rcp-V5 双向认证包含两个方向&#xff0c;分为客户端验证…

10,sql约束(2)

MySQL中primary key和unique的区别 总体而言&#xff0c;主键用于唯一标识表中的每一行记录&#xff0c;而Unique key用于确保某列或列组合的值在表中是唯一的&#xff0c;但它不一定是用来标识记录的主要手段 在sql、oracle中的constrain有两种约束&#xff0c;都是对列的唯一…

OpenCV结构分析与形状描述符(8)点集凸包计算函数convexHull()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 查找一个点集的凸包。 函数 cv::convexHull 使用斯克拉斯基算法&#xff08;Sklansky’s algorithm&#xff09;来查找一个二维点集的凸包&#…