React Hooks
useState
这是组件内状态管理的hook,它是异步更新的
useRef
获取DOM
useRef hook 可以获取DOM节点
例如
const dom = useRef(null)
<div ref=dom ></div>
dom.current
通过dom.current就可以获取当前的DOM节点
保存一个状态
useEffect
useMemo
useCallback
React 样式管理
React-router 路由
如何构建路由表
creatBrowserRouter
嵌套路由
Outlet、children
AntDesignUI 使用
React表单组件、受控组件
Ajax在React项目中的使用
-
使用ahooks的 useRequest 代替 useEffect 实现AJAX的请求
- useRequest包括手动与自动
- useRquest的loading效果 配合antd 的spin
-
axios的使用
- 封装axios
- 通过响应拦截器统一返回的数据格式 data ,也就是筛选掉errno
- 通过请求拦截器携带token
Nodejs
- express
- koa
Mock的使用
- 可以直接在前端项目中使用,但是不推荐
- 配合nodejs使用,通过koa+mockjs实现模拟服务端
- 在线mock平台
Webpack配置
- craco.js 来扩展CRA的webpack配置
Redux 状态管理
基本的hooks
- useContext
- useReducer
Redux toolkit
@reduxjs/toolkit
-
createSlice
- name
- initialState
- reducers
- add
- remove
- export
- slice.reducer
- slice.action (add, remove)
-
configureStore
- reducer:sliceReducer
react-redux
- 使用的话:useSelector
- state.xxxx
- 改变的话:useDispatch
- 需要actions
性能优化
通过useState传递函数
useMemo
useCallback
React.memo
防止子组件没必要的重新渲染的,因为react会让所有子组件更新
拆分bundler文件
analyzing-bundler-size
- 路由懒加载
- Edit和stat优化出去,加载首页的时候不用加载他们
- webpack分块打包 optimization.splitChunks
- antd
- react-dom
- 路由懒加载CRA自动拆分CSS文件
单元测试、可视化测试
jest单元测试
主要在于这个库的api调用
@testing-library/react
- render
- screen
storybook 可视化测试
#第三方库总结
- ahooks
- useRequest
- useTitle
- useDebounceFn
- react-router
- antd
- craco
- dnd-kit
- react-undo
- qrcode-react
- recharts
业务逻辑
我的问卷
搜索功能
搜索组件 改变URL
列表组件根据URL渲染
- keyword 搜索相关
- page、pageSize 分页相关
搜索的时候清空了其他的参数
分页功能
-
第几页 page
-
每页数量 pageSize
-
总数 total
其他组件改变URL
分页组件监听URL中的几个参数,来实现分页功能
分页的时候带着其他的参数
LoadMore功能
不能改变URL, 通过scroll事件
-
第几页 page
-
每页数量 pageSize
-
总数 total
-
还有更多吗 haveMoreData
组件内保存一个list1,请求数据返回一个list2,返回后把数据带入到list1,通过判断list1的长度和total的总数,来判断是不是还能继续假装
防抖
不能划一次就加载一次,滚动之后隔一秒加载
- 使用ahooks - useDebounceFn
光有防抖也不行,还要判断是不是到底了才加载
- useRef判断
- getBoundingClientRect
最终通过useRequest 加载数据
- 手动执行
- onSuccess 来给page+1,来给list1添加数据
标星功能
isStar修改
删除(假删除)功能
isDelete 设置
恢复
isDelete 撤销 一条一条恢复
for await
通过useRequest 的refresh 手动刷新页面
防止多按:useRequest的 debounceWait
彻底删除
一组删除
注册登录
记住密码
通过localstorage
注册
注册成功 提示 挑战登录页
登录
返回token localstorage记录token
登录成功 导航到我的问卷
每次请求都带token
axios请求拦截器
表单校验
编辑器功能
问卷两个基本数据结构
- 问卷的基本信息
- 问卷的组件列表
存储组件列表
- 点击编辑问卷,进入Edit页面
- 通过id加载问卷的信息,包括
- 基本信息
- 组件列表 componentsList
- 将组件列表 componentsList 存入redux store中
渲染画布
-
画布从store中取出组件列表 componentsList
-
根据type配置渲染不同的组件(配置是前面定义好的,只要从里面找就可以了)
点击画布选中
通过一个selectedId共享全局状态
组件库显示
组件库分类显示
组件库点击后添加到画布
属性表单
工具栏
删除
就是从组件列表中移除组件
锁定
islocked 判断, 锁了就不让操作,该样式
隐藏
isHidden 判断, 隐藏就不显示,但是画布中还有
复制粘贴
撤销重做
两个栈的原理
- present
- past
- future
扩展组件库
统计页面
通过状态提升
问卷 答卷的数据结构
通过fe_id联系
问题引申
React hooks
- 各种hooks的使用,作用,场景?
- hooks的原理?
样式管理
- 选择依据?
- css的一些知识?
router
- 路由的原理
- hash?
- history?
antd
- 选择依据?
- antd的一些啥原理?
react表单组件
Ajax
- ajax的各种方案
- XHR
- fetch
- axios
Nodejs
- 了解多少?
- koa、express这种js服务端框架?
- Koa洋葱模型?
mockjs
- 选择方案?
webpack
- webpack的配置?
- loader、plugins原理?
redux
- redux的概念、流程?
- redux toolkit?
- 状态管理方案?
性能优化
- 方案?
测试
- 为什么测试?
- 如何测试?