2025.3.3
讲讲 react 中 hooks 的原理
具体是怎么实现 dom 节点的替换的
vue 是怎么做双向数据绑定的,为什么 data 是数组的话 改变下标不会发生改变。
react 组件的传值种类
kn 的技术架构设计:
入口模块(entry)负责初始化应用,加载核心模块和扩展;2. 核心模块(core)包含 stores、common 和 components 三大部分,stores 管理全局状态,common 提供公共功能,components 负责 UI 渲染;3. 扩展模块(extensions)通过注册机制挂载到核心模块上,提供额外功能如硬件支持、发布作品等;4. API 模块负责与后端通信,处理数据请求和响应;5. 工具模块(utils)提供各种辅助功能。整体架构采用了模块化和可扩展的设计,通过事件机制和状态管理实现模块间的松耦合通信。
构建系统
使用 webpack 作为构建工具
通过 craco 进行 webpack 配置的扩展
自定义了 CssExtractPlugin 插件来优化 CSS 加载性能
实现了代码分割和资源优化
项目结构
src/api:API 接口封装
src/common:公共功能模块
src/components:可复用的 UI 组件
src/extensions:可扩展的功能模块
src/stores:状态管理
src/utils:工具函数
技术栈选项
React 作为前端框架
MobX 进行状态管理
TypeScript 提供类型支持
Ant Design 作为 UI 组件库
工程化实践
使用 ESLint 和 Prettier 规范代码
配置了 Git Hooks 进行提交检查
完整的 CI/CD 流程配置
Docker 容器化部署支持
扩展性设计
通过 extensions 机制实现功能模块的插件化
支持国际化
支持主题定制
各个模块之间的调用顺序
入口初始化
src/index.tsx 作为主入口,负责初始化各个核心模块
通过 entry/index.ts 初始化不同的工作模式(普通、硬件、少儿等)
状态管理
stores/index.ts 定义了多个 Store 用于状态管理:
CommonStore:通用状态
RuntimeStore:运行时状态
WorkStore:作品相关状态
ConfigStore:配置相关状态
ComponentsStore:组件状态
事件系统
common/event-emitter 实现了一个统一的事件系统
通过 EventEmitterManager 类管理事件的订阅和发布
EventType 枚举定义了系统支持的所有事件类型
扩展机制
extensions/core.ts 实现了插件注册机制
通过 registerExtensions 方法注册各类扩展
支持硬件扩展如 microbit、tudao 等
组件系统
components/Dialog 实现了统一的对话框管理
基于 mobx-react-lite 实现组件的状态管理
使用 Transition 组件实现过渡动画
API 层
api/index.ts 导出了主要的 API 模块:
HandlerApi:处理各类操作
ServiceApi:服务相关接口
DialogApi:对话框相关接口
这些模块通过事件系统和状态管理实现了松耦合的通信,扩展机制则提供了良好的可扩展性。
最后更新于
这有帮助吗?