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
相关推荐
程序员清洒3 小时前
Flutter for OpenHarmony:GridView — 网格布局实现
android·前端·学习·flutter·华为
VX:Fegn08953 小时前
计算机毕业设计|基于ssm + vue超市管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·课程设计
0思必得03 小时前
[Web自动化] 反爬虫
前端·爬虫·python·selenium·自动化
LawrenceLan4 小时前
Flutter 零基础入门(二十六):StatefulWidget 与状态更新 setState
开发语言·前端·flutter·dart
秋秋小事4 小时前
TypeScript 模版字面量与类型操作
前端·typescript
2401_892000524 小时前
Flutter for OpenHarmony 猫咪管家App实战 - 添加提醒实现
前端·javascript·flutter
Yolanda944 小时前
【项目经验】vue h5移动端禁止缩放
前端·javascript·vue.js
广州华水科技6 小时前
单北斗GNSS形变监测一体机在基础设施安全中的应用与技术优势
前端
EndingCoder6 小时前
案例研究:从 JavaScript 迁移到 TypeScript
开发语言·前端·javascript·性能优化·typescript
阿珊和她的猫7 小时前
React 路由:构建单页面应用的导航系统
前端·react.js·状态模式