首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SVGEdit:老牌开源 SVG 编辑器是如何架构

作为一款 SVG 编辑器,选择 SVG 没有毛病,这样渲染效果就完全交给浏览器,不需要根据标准去实现渲染效果,自己专心写编辑器业务逻辑即可。...没有TypeScript,因为是很老项目,当时 TypeScript 尚未大行其道。如果要做新项目,建议还是上 TypeScript,大型复杂软件还是很需要类型系统。 打包用了 Rollup。...它没有React、Vue 这些 UI 框架,而是选择 Web Component,认为这是一个糟糕决策。...SVGEdit 使用了 patch(打补丁)方式记录历史操作,没有使用图形树快照方式。 下面是移动一个矩形产生操作命令,它记录了修改图形属性命令,该命令保存了一个元素修改前后属性。...简评 UI 框架应该选择 React 或 Vue。 这样项目才会有更多人使用,作为一款比较古早编辑器才可能焕发第二春。

59130

开源白板工具 Excalidraw 架构解读

本文讲解开源白板工具 Excalidraw 架构设计。 版本 0.16.1 技术栈 Vite + React + TypeScript + Yarn + Husky。...目前市面上比较流行 React 脚手架是 Vite,所以几个月前 Excalidraw 把脚手架替换为了 Vite,很合理。 使用React 去实现 UI 层,国外还是 React 流行一些。...TypeScript 用于类型标注,减少一些类型错误。 Yarn 是包管理器,没有使用 monorepo。 Husky 是 git hook 库,会在本地 git commit 时做一些校验。...但一些复杂方法也是会抽离出来放到一个单独文件里,比如 group.js 里放都是和编组相关逻辑。 渲染方案 Excalidraw 选择了 Canvas 2D 渲染方案。...没有使用脏矩形局部渲染。 图形拾取方案 图形拾取使用了几何法。 不同图形渲染逻辑判断逻辑是写在一起。 历史记录 历史记录逻辑在 History 类中。

55931
您找到你想要的搜索结果了吗?
是的
没有找到

简单介绍一下在做图形编辑器

技术栈 React + pnpm + TypeScript + Canvas 2D + husky。 TypeScript 是必须,因为这是一个复杂项目,现在已经有点复杂了,以后会更复杂。...开始没做 monorepo,后面倒是做了 monorepo,但我并没有把项目的分层分到每个包里,只是创建了两个 React 组件相关包,一个组件库,一个图标库。分包了但没完全分。...渲染方案 渲染方案选择了原生 Canvas 2D。 没有使用流行图形库,比如 pixijs、konva 这些,只是简单封装了一些图形对象,比如 sence/rect,自己实现了一个图形场景树。...Canvas 易用性,搭配 wasm 优秀性能,还是很香。 图形拾取 图形拾取方案,是基于几何算法。 为了提高效率,图形点击区域只是图形包围盒区域。这很不精细。...比如选择工具类,因为子操作太多了,就把它拆成移动图形类、绘制选区类、旋转图形类等等。 图标 编辑器一些图标是用 Figma 绘制,然后复制为 SVG,放到 icon 包 Rect 组件里。

36030

最好用 5 个 React select 多选下拉菜单组件测评推荐

/ 多选(select)功能使用非常普遍,React select 除了用鼠标点选外,还可以有更多样功能,比如搜索过滤,树状结构,tab 分组,按组选择等。...这些高级功能都可以在第三方组件中找到,本文记录了自己使用多年最好用 6 款 React select 多选下拉组件,每一款都经过实际测试,推荐给大家。...接下来介绍 6 款自己常用 React Select 第三方组件,它们各有特色,希望能帮你找到合适你选择React Select - 多选下拉菜单王者组件库,覆盖多数应用场景 React multi...component] React-multi-select-component 是一款简洁多选框组件,零依赖,超轻量(<5KB),使用 TypeScript 开发 支持 React 。...可使用键盘快捷键。 支持服务端渲染(SSR) 轻量级 使用 TypeScript 开发 扩展阅读《React Echarts 使用教程 - 如何在 React 中加入图表》 6.

7.1K30

使用 TypeScript 开发 React Hooks

React TypeScript TypeScript 由微软设计并沿着 Angular 路径一路进发,而彼时 React 开发出 Flow 已然式微。...本地状态类型往往能推导出默认状态。 因为 hooks 组件就是函数,故可以编写返回 React.FC 类型(译注:FC 即 function components)相同组件函数。...适配 hooks TypeScript 特性 在之前 React hooks TypeScript 例子中,对于 QuotationProps 接口中属性如何使用使用哪些,仍是不甚了了、颇有不便...并不是懒得为了声明个新接口而懒得多写两行 -- 需要精确描述领域内命名时,我会使用接口;而出于保证本地代码正确性、降噪目的,使用这些 TS 工具语法。...React Hooks 其他益处 React 团队始终将 React 视为一个函数式框架。过去他们使用类组件以处理自身状态,现在有了 hooks 这种允许一个函数跟踪组件状态技术。

2K10

每个前端开发者都可以拥有属于自己命令行脚手架

之前,也写过类似的开发命令行工具文章,但是核心思想都是通过代码远程拉取Git仓库中项目模板代码。有时候会因为网速原因导致拉取失败,进而会初始化项目失败。 那么,有没有比这个更好方案呢?...然后,自定义选择需要模板进行初始化项目,就大功告成了!这种操作着实把惊到了!在想,如果把create-vite这种思路应用到我自己脚手架工具中是不是很Nice!...Yarn依赖管理工具,所以我首先使用命令初始化依赖。 yarn 然后,我们可以先打开根目录下package.json文件,会发现有如下命令。...color属性,并且有类似颜色属性,这是依赖kolorist导出常量。...上图显示Error,是因为没有在demo模板上创建package.json文件,所以这里可以忽略。你可以在自己模板里创建一个package.json文件。

1.1K30

TS_React:使用泛型来改善类型

大家好,是「柒八九」。 今天,又双叒叕yòu shuāng ruò zhuó开辟了一个新领域--「TypeScript实战系列」。...你能所学到知识点 ❝ TypeScript简单概念 泛型Generics概念和使用方式 在React利用泛型定义hook和props ❞ 文章概要 TypeScript 是什么 泛型Generics...这让想起了我们利用 setState 定义 state 时 可以「直接提供新状态」, 或者提供一个函数,从旧状态上建立新状态。 然后,我们再继续看看Dispatch发生了啥?...在React使用泛型 现在我们已经理解了泛型概念,我们可以看看如何在React代码中应用它。...return ( .... ); } 上面代码不满足我们情况。原因是,在一个select数组中,你可能有一个select是数字类型,而另一个select是字符串类型。

5.1K20

Rocket Chat,一个纯前端技术构建开源产品

具体下来说,使用一些前端技术主要包括 •语言:JavaScript / TypeScript•后端框架:NodeJS•移动端开发框架:React Native•跨平台桌面开发框架:Electron•...不过, Rocket Chat使用Node.js来编写它后端,证明了它仍然是值得考虑后端选择。...不过这几年,React Native风头似乎没有Flutter大。Flutter实现机制决定了它在性能上更高效,所以也更吸引人。...当然,对于前端团队来说,使用React Native也能编写出非常好移动app,肯定比不熟悉Flutter来得更容易。 3.Electron 前几周才专门就这个技术写了几篇文章。...但我认为,有几个困难是导致这种选择并不会成为常态: 1.不同端技术分裂发展很久了,不同端团队使用不同技术来完成自己方向功能这是当前主流做法。

3.7K40

使用Yarn workspace,TypeScript,esbuild,React和Express构建 K8S 云原生应用(一)

本文将指导您使用 K8S ,Docker,Yarn workspace ,TypeScript,esbuild,Express 和 React 来设置构建一个基本云原生 Web 应用程序。...Workspaces(工作区) 进入到要初始化项目的文件夹,然后通过您喜欢终端执行以下步骤: 使用 mkdir my-app 创建项目的文件夹(可以自由选择所需名称)。...现在我们已经安装了 TypeScript,一个好习惯是告诉它如何运行。为此,我们将添加一个配置文件,该文件应由您 IDE 拾取(如果使用 VSCode,则会自动获取)。...目前它并没有太大作用,但是我们总是可以稍后再使用它并添加更多功能。...添加 .dockerignore 使用 .dockerignore 文件不是强制性,但强烈建议您使用以下文件: 确保您没有将垃圾文件复制到容器中。 使 COPY 命令使用更加容易。

4.1K31

Vue 在哪些方面做React 更好?

在深入研究 Vue.js 文档并使用 Vue.js 之后(注意:不是 Vue.js 专家),在有些方面 Vue.js 比 React更好。... A 现在,要为 React 辩护一点是,React 鼓励你学习数据实际上是如何设置以及它是如何变化...这意味着它们 TypeScript 支持是一流,因为框架本身是用 TypeScript 编写。...最终,React 用什么编写并不重要,也不认为它有什么太大区别,但看到 Vue.js 所拥有的仍然是一个很不错小事情。 总结 要放弃 React 并开始专门使用 Vue.js 吗?不。...如果只能从文中提到几个点中选择一个,那绝对是 风格指南。很乐意看到 React 有一个官方支持和维护风格指南。

1.9K10

React移动端和PC端生态圈使用汇总

由于React生态极为庞大,本文内容部分来自一些别人汇总,至于原文只要还是能找到都会贴上地址,谢谢前期贡献作者,如果有没有被汇总到,欢迎在下面补充。...生态圈: React官方推荐超大型项目使用TypeScript 为什么要把TypeScript放在第一位,因为TypeScript在构建超大型应用时,多人协作可以极大加快工作效率,特别是前后端交互特别多...个人建议,在Node.js开发和React native以及大型React使用TypeScript 在下载官方react脚手架中,包含了一个第三方ts创建脚手架命令 在 Create React...App 中使用 TypeScript Create React App 内置了对 ·TypeScript` 支持。...参考文章,react-native原理解析,看在react-native跨平台开发无缝对接js和react份上,决定坚定使用它。希望在1.0版本到来时候,给我们一个惊喜。

2.2K40

React移动端和PC端生态圈使用汇总

由于`React`生态极为庞大,本文内容部分来自一些别人汇总,至于原文只要还是能找到都会贴上地址,谢谢前期贡献作者,如果有没有被汇总到,欢迎在下面补充。...生态圈: `React`官方推荐超大型项目使用`TypeScript` 为什么要把TypeScript放在第一位,因为TypeScript在构建超大型应用时,多人协作可以极大加快工作效率,特别是前后端交互特别多...开发和React native以及大型React使用TypeScript 在下载官方react脚手架中,包含了一个第三方ts创建脚手架命令 在 Create React App 中使用 TypeScript...流程如下图: 参考文章,react-native原理解析,看在react-native跨平台开发无缝对接js和react份上,决定坚定使用它。希望在1.0版本到来时候,给我们一个惊喜。...环境搭建: 首先,你需要使用 npm 或者 yarn 全局安装@tarojs/cli,或者直接使用npx: taro init myApp 选择微信小程序模式,需要自行下载并打开微信开发者工具,然后选择项目根目录进行预览

2.3K10

TypeScript编写React最佳实践

将它们一起使用原因是为了获得静态类型化语言( TypeScript )对 UI 好处:减少 JS 带来 bug,让前端开发更安全。 TypeScript 会编译 React 代码吗?...将对其进行编译,并确保你没有错过任何内容。” React:“听起来对很好!” 因此,答案是肯定!...因为第二个实例返回一个函数,而不是一个或表达式,所以我们我们注明了这个函数返回React.FC 类型。 记住这两种方式可能会让人混淆。这主要取决于设计选择。...Hooks 幸运是,当使用 Hook 时, TypeScript 类型推断工作得很好。这意味着你没有什么好担心。...这是一个 ReactTypeScript 协同工作成果。 在极少数情况下,你需要使用一个空初始化 Hook ,可以使用泛型并传递联合以正确键入 Hook 。

4.7K51

React移动端和PC端生态圈使用汇总

由于React生态极为庞大,本文内容部分来自一些别人汇总,至于原文只要还是能找到都会贴上地址,谢谢前期贡献作者,如果有没有被汇总到,欢迎在下面补充。...生态圈: React官方推荐超大型项目使用TypeScript 为什么要把TypeScript放在第一位,因为TypeScript在构建超大型应用时,多人协作可以极大加快工作效率,特别是前后端交互特别多...个人建议,在Node.js开发和React native以及大型React使用TypeScript 在下载官方react脚手架中,包含了一个第三方ts创建脚手架命令 在 Create React...App 中使用 TypeScript Create React App 内置了对 ·TypeScript` 支持。...参考文章,react-native原理解析,看在react-native跨平台开发无缝对接js和react份上,决定坚定使用它。希望在1.0版本到来时候,给我们一个惊喜。

2.5K10

基于 ChatGPT 和 React 搭建 JSON 转 TS Web 应用

========许多网站为不同场景提供 API简单解决方案是发送 JSON 并返回 Typescriptinterface你也可以使用 JSON-to-typescript 库来实现,但我将使用...因此在本文中,我们将使用 API 构建一个 JSON 到 Typescript 转换器项目设置====在这里,我们会为 Web 应用创建项目环境。...我们将在前端使用 React.js,在后端使用 Node.js通过运行以下代码为 Web 应用创建项目文件夹:mkdir json-to-typescript-cncd json-to-typescript-cn...npm start设置 React 应用通过终端导航到根目录并创建一个新 React.js 项目npm create vite@latest✔ Project name: client✔ Select...转换器创建用户界面,使用户能够在屏幕左侧添加 JSON 对象,并在屏幕右侧查看 Typescript结果。

27810

美团前端二面常考react面试题(附答案)

使用状态要注意哪些事情?要注意以下几点。不要直接更新状态状态更新可能是异步状态更新要合并。数据从上向下流动可以使用TypeScriptReact应用吗?怎么操作?...(1)如果还未创建 Create React App 项目直接创建一个具有 typescript Create React App 项目: npx create-react-app demo --typescript...Keys 应该被赋予数组内元素以赋予(DOM)元素一个稳定标识,选择一个 key 最佳方法是使用一个字符串,该字符串能惟一地标识一个列表项。...所以,如果想要修改state,就需要使用setState,而不能直接修改state,直接修改state之后页面是不会更新React.forwardRef是什么?它有什么作用?...在 HTML 中,表单元素如 、和通常维护自己状态,并根据用户输入进行更新。当用户提交表单时,来自上述元素将随表单一起发送。

1.2K10

vue2.x老项目typescript改造过程经验总结

对于vue-cli项目来说,从新跑一遍 vue create xxx-project ,选择Manually select features ,重新选择typescript 选项即可。...在这种严格检查情况下,如果你确实在某个地方想要给一个其他类型设置初始为空,然后再赋值,可以使用联合类型来实现。...tsx组合方案:Vue Components + TypeScript 起初是写react,后写vue,所以更喜这种风格 import Vue, { VueConstructor, CreateElement...直接升级Vue3.0 没有怎么做,如果是重写性重构,肯定会直接用Vue3.0。但是对于庞大项目,重构直接用3.0,还是怕怕。...虽然尤大大说vue2 与vue3,不会像angular2 与其后代版本差异那么大,但是,还是缓缓先 Vuex Store痛 在ts里面使用vuex非常蛋疼。

5.2K41

TypeScript 终极初学者指南

大家好,是 ConardLi,在过去几年里 TypeScript 变得越来越流行,现在许多工作都要求开发人员了解 TypeScript,各大厂大型项目基本都要求使用 TypeScript 编写。...中对象 TypeScript对象必须拥有所有正确属性和类型: // 使用特定对象类型注释声明一个名为 person 变量 let person: { name: string;...例如,与在代码中使用非描述性数字不同,枚举通过描述性常量使代码更具可读性。 枚举还可以防止错误,因为当你输入枚举名称时,智能提示将弹出可能选择选项列表。...这意味着我们可以将 TypeScript 与三个最常见 React 框架一起使用: create-react-app (https://create-react-app.dev/docs/adding-typescript...React TypeScript 文件)扩展名文件,并使用 TypeScript 编写我们组件。

6.8K20
领券