第一个React程序

虽然跟着网上的视频,但是都是几年前的教学视频了,于是就在视频的引导下,自己使用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]=res

    const 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>
  )
}
相关推荐
诸葛亮的芭蕉扇3 分钟前
tree组件点击节点间隙的异常问题分析
前端·javascript·vue.js
GinoWi27 分钟前
HTML基本格式 - 第一个HTML网页
前端
顶鲜花的牛粪30 分钟前
Astro 项目升级全栈:EdgeOne Pages 部署指南
前端
0***R51541 分钟前
前端云原生
前端·云原生
星轨初途41 分钟前
数据结构排序算法详解(5)——非比较函数:计数排序(鸽巢原理)及排序算法复杂度和稳定性分析
c语言·开发语言·数据结构·经验分享·笔记·算法·排序算法
月弦笙音1 小时前
【Promise.withResolvers】发现这个api还挺有用
前端·javascript·typescript
疯狂踩坑人1 小时前
MCP理论和实战,然后做个MCP脚手架吧
前端·node.js·mcp
中杯可乐多加冰1 小时前
基于 DeepSeek + MateChat 的证券智能投顾技术实践:打造金融领域的专属大Q模型助手
前端·人工智能
凡人程序员1 小时前
搭建简易版monorepo + turborepo
前端·javascript
丸子哥哥1 小时前
同一个域名,如何添加多个网站?
服务器·前端·nginx·微服务