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
相关推荐
jayaccc20 小时前
微前端架构实战全解析
前端·架构
qingyun98920 小时前
Web Components 实战:创建自定义比例条组件
前端
前端小超超20 小时前
ionic + vue3 + capacitor遇到backButton问题
前端·javascript·vue.js
GIS之路20 小时前
GDAL 空间关系解析
前端
布列瑟农的星空21 小时前
WebAssembly入门(一)——Emscripten
前端·后端
贵州数擎科技有限公司21 小时前
一批优质 AI 域名转让(.ai)|适合 AI 创业 / 产品 / 公司品牌
前端
小二·21 小时前
微前端架构完全指南:qiankun 与 Module Federation 双方案深度对比(Vue 3 + TypeScript)
前端·架构·typescript
EndingCoder21 小时前
枚举类型:常量集合的优雅管理
前端·javascript·typescript
Electrolux1 天前
[wllama]纯前端实现大语言模型调用:在浏览器里跑 AI 是什么体验。以调用腾讯 HY-MT1.5 混元翻译模型为例
前端·aigc·ai编程