一个学习 React, typescript 的 demo 项目。
- 了解 React 常见的脚手架,创建项目
- 配置编码规范, eslint, prettier
- 代码提交到Git仓库, husky, commitlint
- Create-React-App 内部使用 webpack 进行打包
- Vite 比 Webpack 打包项目更快(启动时,代码更新时),Vite 使用 ES Module 的语法(开发环境)
- 但技术选型要综合考虑,包括稳定性、成本、效率等。
- 学习JSX 基本语法
- 学会React组件基础知识
- 实战: 开发一个列表页
- 大写表示组件,小写表示html标签
- 标签必须要闭合
- 每个JSX只能有一个根节点
- class 要改为 className
- style 要使用JS对象,而且 key用驼峰写法
- for 要改为 htmlFor
- 使用onXxx 的形式
- 必须要传入一个函数
- 注意TS 的类型
- 使用 {XXX} 插入变量, 函数,表达式
- 可插入文本,属性
- 可用于注释
- &&
- 条件表达式
- 使用数组map
- 父子组件通信
- 组件自定义Props的 TS 类型
- List 组件
- QuestionCard 组件
- 判断, Vue 模板使用 v-if,v-else, React JSX 使用条件表达式
- 循环, Vue 模板使用 v-for, React JSX 使用 map。
- React能用JS就用JS, Vue 自定义很多指令
- React 内置Hooks
- 自定义 Hooks
- 使用第三方Hooks
- state 是 内部的状态,state的更新会触发组件的更新
- state 的更新是异步更新
- 如果变量不在JSX中使用,用useRef 代替 useState
- 可能会被合并, 使用函数不会被合并
- 不可变数据,不去修改state的值,而是去传入一个新值
不可变数据
声明周期:创建,更新,销毁 React18开始,开发环境会执行两次useEffect, 模拟组件创建、更新、销毁的完整流程 生产环境会执行一次useEffect
一般用于操作DOM 也可传入普通JS 变量,不会触发 rerender
可以缓存数据,不用每次执行函数都重新执行 可用于计算量较大的场景,缓存提高性能
缓存事件的回调函数
- 自定义hooks
- 第三方hooks, react-use, a-hooks
- 必须使用 useXXX 格式命名
- 只能在两个地方调用hook, 组件内,其他的Hook
- 必须保证每次的调用顺序一致,不能放在 if for 内部
当异步函数取state 时,可能不是最新的state; 可以用useRef来解决。
- 普通方式 ,内联style + 引入 css 文件
- classnames
- clsx
- css Module 和 Sass
- 解决类名重复的问题
- css inh js, styled-component, style-jsx, Emotion