React和响应式系统6 | 青训营笔记

55 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第11天

谈谈ReactHooks的设计模式

认知基础

忘记生命周期,以Effects的方式开始思考

以事务的角度来思考问问题并编写代码

经过Hooks的改造,只需要一个Effect就完整实现了多个生命周期函数才能完成的业务逻辑,比如监听和取消监听

如果希望进一步的抽象和复用,只需要将Effect的代码抽象定义为自定义Hook,这比生命周期来的简单

常规操作

React.memo VS React.useMemo

  • hooks推荐使用useMemo,可以实现更加精细化的操作

常量

  • 由于函数组件每次重新渲染的时候都会重新执行,所以常量应该放置到函数外面去避免每次都重新创建,而如果定义的常量是一个函数,且需要使用函数组件内部的变量做计算,那么一定要使用useCallback来缓存函数

useEffect第二个参数

  • 在设计上他同样是进行浅比较,如果传入的是引用类型,那么很容易被判定为不相等,所以尽量不要使用引用类型作为判断条件,容易出错

工程实践

外观模式:在组件中通过各个自定义Hook去操作业务逻辑,每个自定义Hook都是一个独立的子模块有属于自己的领域模型

React-Router 的实现原理及工作方式分别是什么?

实现原理

外部:基础原理

切换Hash运用了浏览器Hash,

切换网址运用了HTML5 HistoryApi中的pushState和replaceState

服务端要完成HistoryApiFallback的配置

内部:实践方案

react-router

react-router-dom:基础路由是BrowserHistory,调用histotryApi

react-router-native:基础路由是MemoryHistory

工作方式

整体:设计模式

运用了Monorepo架构一个packages包括多个package

运用了ContextApi完成了数据共享

局部:工作方式

  1. Context容器,分别是Router与MemoryRouter,主要提供上下文消费容器
  2. 直接消费者提供路由匹配功能分别是Route,Redirect Switch
  3. 与平台关联的功能组件分别是react-router-dom中的LinkNavLink及react-native中的DeepLinking

React 中你常用的工具库有哪些?

初始化

运用react-app-rewired对create-react-app提供拓展能力

单个组件项目使用create-react-library

大型组价项目推荐使用storyLibrary

开发

路由:ReactRouter

样式:tailwindicss styledcomponent windicss unocss

展示组件:Antd

功能组件:React-draggable实现拖拽 Video-React用于播放视频 react-pdf-viewer用于预览PDF react-window和react-virtualized用于长列表问题的解决

构建:webpack vite

检查:ESLint代码规范检查,代码编写测试 jest react-testing-library react-hooks-testing-library

发布 : s3-plugin-webpack处理静态资源上传