React 01 目录结构、tsx 语法

REACT

参考资料

  1. BV1mcpPeMETt
  2. https://message163.github.io/react-docs/react/basic/development.html

简介

React 是一个 JS 库

安装

目录结构

index.html:入口文件

package-lock.json 作用:锁版本号 + 缓存

package.json

javascript 复制代码
{
  "name": "demo1",
  "private": true,
  "version": "0.0.0",
  "type": "module",
  可执行命令
  "scripts": {
    "dev": "vite",
    "build": "tsc -b && vite build",
    "lint": "eslint .",
    "preview": "vite preview"
  },
  "dependencies": {
    "react": "^19.2.0",
    "react-dom": "^19.2.0"
  },
  开发依赖-开发环境的依赖-不会被打包
  "devDependencies": {
    "@eslint/js": "^9.39.1",
    "@types/node": "^24.10.1",
    "@types/react": "^19.2.5",
    "@types/react-dom": "^19.2.3",
    "@vitejs/plugin-react-swc": "^4.2.2",
    "eslint": "^9.39.1",
    "eslint-plugin-react-hooks": "^7.0.1",
    "eslint-plugin-react-refresh": "^0.4.24",
    "globals": "^16.5.0",
    "typescript": "~5.9.3",
    "typescript-eslint": "^8.46.4",
    "vite": "^7.2.4"
  }
}

为什么main.tsx的document.getElementById('root')!要加一个!

因为document.getElementById('root')返回可能为空,这时候就会报错。!是非空断言,告诉编辑器这个表达式不会为空。

public公共目录和assets静态资源有什么区别?

答:public目录的资源编译之后会存放到根目录,而静态资源assets是会随着项目一起打包的,public则不会被编译。

tsx 语法

讲解

jsx是什么?

答:jsx是js的语法扩展,允许在js中编写html代码。

例如:const fn = () => <div>哈哈哈</div>

使用

  1. 插值语句 jsx tsx 展示:字符串数字数组(普通类型)元素三元表达式API调用
  2. 插值语句如何支持对象?------序列化
  3. 事件如何添加?------驼峰 onClick。
    如果需要传参使用高阶函数;如果不需要就直接丢给他函数体
  4. 如何支持泛型函数?不成功的原因是因为把<T>理解成了是一个元素<div>。------解决方案:纠正泛型<T, >
javascript 复制代码
function App() {
  const fn = () => 'test';
  const num = 3.1415926;
  const obj = {name: 1};
  const test1 = () => {
    console.log('test1');
  }

  const test2 = (params, e) => {
    console.log('test2', e);
  }

  const test3 = <T,>(params: T) => {
    console.log('test3');
  }

  return (
    <>
      <div>
        {'hahaha' /** 字符串用法 */}
        {123 /** 变量用法 */}
        {fn() /** 函数用法 */}
        {[1,2,3] /** 数组用法 --- 数组元素只能是普通类型*/}
        { true ? 'true' : 'false' /** 三元表达式用法 */}
        {num.toFixed(2) /** API 调用:表达式用法 */}
      </div>

      <div>
        {JSON.stringify(obj)}
      </div>

      <div onClick={test1}>点击我,普通函数没有传参</div>
      <div onClick={(e) => test2(123, e)}>点击我,传参函数,用高阶函数</div>
      <div onClick={() => test3('111')}>点击我,泛型函数</div>
    </>
  )
}

export default App
  1. 如何去绑定属性 id class 等等
    class比较特殊 className
  2. 如何绑定多个class
  3. 绑定style(color:'blue')
  4. 添加html代码片段 v-htmldangerouslySetInnerHTML
javascript 复制代码
function App() {
  const id1 = '123';
  const cls1 = 'test';
  const style1 = {color: 'blue', fontSize: '20px'};
  const htmlString = '<div style="color: GREEN; font-size: 15px;">666: 如何绑定 innerHTML</div>';

  return (
    <>
      <div id = {id1}>111: 如何绑定 id</div>
      <div className={cls1}>222: 如何绑定 class</div>

      <div className={`${cls1} aa bb cc`}>333: 如何绑定多个class</div>

      <div style={style1}>444: 如何绑定 style</div>
      <div style={{color: 'blue', fontSize: '20px'}}>555: 如何绑定 style</div>

      <div dangerouslySetInnerHTML={{__html: htmlString}}></div>
    </>
  )
}
  1. 如何去遍历数组------类似 V-for
javascript 复制代码
import './App.css'

function App() {
  const arr = [1, 2, 3, 4, 5];
  return (
    <>
      <div>
        {
          arr.map(item => {
            return <div key={item}>{item}</div>
          })
        }
      </div>
    </>
  )
}

export default App
相关推荐
鬼手点金14 小时前
nanoGPT/nanochat 能做出 DeepSeek/Qwen 这样的大模型吗?
服务器·前端·javascript·bug·openclaw
蛋蛋的就会顺顺的14 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
程序员Sunday14 小时前
TypeScript 的 any、unknown、never 有什么区别?
前端·面试·typescript
朱涛的自习室14 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
码艺-Alimjan15 小时前
Tauri 源码备份 · 打包 & 解压 总结,源码收集之路
前端·javascript·vue.js
小马不起床15 小时前
零基础玩转 FastAPI_11:前端后台管理页面
前端·状态模式·fastapi
子非鱼a16 小时前
【文件上传】一个普普通通的edu16
前端
美狐美颜SDK开放平台17 小时前
直播APP如何实现美白滤镜功能?视频美颜SDK技术开发方案详解
前端·数据库·人工智能·音视频·美颜sdk·直播美颜sdk·视频美颜sdk
pride.li17 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
屏什么录18 小时前
电脑如何录屏幕视频和声音?从工具到代码,7 种方案帮你彻底搞定
前端·音视频开发