Composable Vue, 编写可组合可复 的Vue 函数的最佳实践与技巧可组合的 Vue Composable Vue, 编写可组合可复⽤的 Vue 函数的最佳实践与技巧 ANTHONY FU Hangzhou, China 2021 Anthony Fu antfu antfu7 Anthony Fu antfu.me Vue 核⼼成员 / Vite 团队成员 VueUse, Slidev, Type Challenges 等项⽬创作者 全职开源 上下⽂丢失 有限的类型⽀持 按 API 类型组织 极易复⽤ (原⽣ JS 函数) 可灵活组合 (⽣命周期钩⼦可多次使⽤) 提供更好的上下⽂⽀持 更好的 TypeScript 类型⽀持 按功能/逻辑组织 可独⽴于 Vue 组件使⽤ 对象式 API 存在的问题 组合式 API 提供的能⼒ 什么是可组合的函数 Dark 可复⽤逻辑的集合,专注点分离 export function 'dark' : 'light' }, }) } 在 VueUse 中可⽤: usePreferredDark useLocalStorage useDark 组合关系 其中每⼀个函数都可以独⽴使⽤ 专注点分离 useDark usePreferredDark useLocalStorage useStorage useEventListener useMediaQuery0 码力 | 36 页 | 4.87 MB | 1 年前3
TypeScript 4.0 使用手册
Gulp Knockout.js React与webpack React Angular 2 从JavaScript迁移到TypeScript 手册 基础类型 变量声明 接口 类 函数 泛型 枚举 类型推论 类型兼容性 高级类型 Symbols Iterators 和 Generators 模块 命名空间 命名空间和模块 模块解析 声明合并 JSX Decorators Gulp Knockout.js React与webpack React Angular 2 从JavaScript迁移到TypeScript 手册 基础类型 变量声明 接口 类 函数 字面量类型 泛型 枚举 类型推论 类型兼容性 高级类型 Symbols Iterators 和 Generators 模块 命名空间 命名空间和模块 模块解析 声明合并 Gulp Knockout.js React与webpack React Angular 2 从JavaScript迁移到TypeScript 手册 基础类型 变量声明 接口 类 函数 泛型 枚举 介绍 目录 Introduction - 12 - 本文档使用 书栈网 · BookStack.CN 构建 类型推论 类型兼容性 高级类型 Symbols Iterators0 码力 | 683 页 | 6.27 MB | 1 年前3
TypeScript Handbook(中文版)
15 3.16 3.17 3.18 3.19 3.20 3.21 3.22 4 4.1 4.2 4.3 4.4 4.5 4.6 5 5.1 5.2 接口 类 函数 泛型 枚举 类型推论 类型兼容性 高级类型 Symbols Iterators 和 Generators 模块 命名空间 命名空间和模块 模块解析 声明合并 书写.d.ts文件 TypeScript 1.6 TypeScript 1.5 TypeScript 1.4 TypeScript 1.3 TypeScript 1.1 手册 基础类型 变量声明 接口 类 函数 泛型 枚举 类型推论 类型兼容性 高级类型 Symbols Iterators 和 Generators 模块 命名空间 命名空间和模块 模块解析 声明合并 书写.d.ts文件 文件,它包含了和输入文件中相同的JavsScript代 码。 一切准备就绪,我们可以运行这个使用TypeScript写的JavaScript应用了! 接下来让我们看看TypeScript工具带来的高级功能。 给 person 函数的参数添加 : string 类型注解,如下: function greeter(person: string) { return "Hello, " + person; } var0 码力 | 557 页 | 7.48 MB | 1 年前3
Vue.js v3.0 教程(Vue3 教程)注入 动态组件 & 异步组件 模板引用 处理边界情况 过渡&动画 过渡 & 动画概述 进入过渡 & 离开过渡 列表过渡 状态过渡 可复用性&组合 混入 自定义指令 传入 渲染函数 插件 高阶指南 - 2 - 本文档使用 书栈网 · BookStack.CN 构建 响应性 深入响应性原理 响应式原理 响应式计算和侦听 组合 API 介绍 Setup 生命周期钩子 自定义元素交互 Data 选项 事件 API 过滤器 片段 函数式组件 - 3 - 本文档使用 书栈网 · BookStack.CN 构建 全局 API 全局 API Treeshaking 内联模板 Attribute key attribute 按键修饰符 在 prop 的默认函数中访问 this 渲染函数 API Slot 统一 过渡的 class 名更改 v-model 高阶功能,所以请务必读完整个教程! 与自定义元素的关系 准备好了吗? 介绍 - 19 - 本文档使用 书栈网 · BookStack.CN 构建 每个 Vue 应用都是通过用 createApp 函数创建一个新的应用实例开始的: 1. const app = Vue.createApp({ /* 选项 */ }) 该应用实例是用来在应用中注册“全局”组件的。我们将在后面的指南中详细讨论,简单的例子:0 码力 | 368 页 | 3.97 MB | 1 年前3
2019-2021 美团技术年货 前端篇进行代码还原,DSL2Code 主要包括两个步骤:属性推断、属性信息调整。 2.2.1 属性推断 属性推断包括两个部分:样式属性和结构属性。样式属性包括字体、背景色、圆角等 可以直接通过数据源信息中获取得到的属性;结构属性包括大小、内外边距、主辅轴 对齐等结构信息,这些信息无法从数据源中直接获取,所以结构信息的推断是这部分 工作的重点。 结构信息推断算法同样使用递归算法作为主框架,通过一次递归对所有元素进行两次 所有元素进行两次 遍历来完成结构信息的推断。如下图所示,在对 DSL 所有节点进行递归遍历时,把 所有元素依次加入队列中,递归完成后,再把所有节点依次移出队列,这样一进一出 便对所有元素完成了两次遍历,我们把这两次遍历称为进队遍历和出队遍历。 进队遍历时,推断算法根据数据源中信息记录每个节点的大小和位置信息,并根据位 置关系计算每个子节点在父节点中期望的主辅轴对齐方式和内外边距。出队遍历时, 2 属性信息调整 由于输入源是基于设计稿呈现的静态效果图,设计稿中每个元素缺失了真实的业务含 义,同样的展示效果在不同的业务场景中会有不同的属性要求,对于这部分内容,我 们无法从输入源中进行准确推断。为此,我们提供了可视化的属性信息调整功能来辅 助代码生成,页面效果如下图所示,在这个页面可以对 DSL 中的所有节点属性进行 查看和修改调整。 经过业务信息补充后,便可进行最后的自动代码转化,通过语法映射自动把0 码力 | 738 页 | 50.29 MB | 1 年前3
阮一峰 JavaScript 教程目 录 致谢 介绍 前言 入门篇 导论 历史 基本语法 数据类型 概述 null,undefined 和布尔值 数值 字符串 对象 函数 数组 运算符 算术运算符 比较运算符 布尔运算符 二进制位运算符 其他运算符,运算顺序 语法专题 数据类型的转换 错误处理机制 编程风格 console 对象与控制台 标准库 Object 对象 属性描述对象 控制这些功能。但是,JavaScript 并不是纯粹的“面 向对象语言”,还支持其他编程范式(比如函数式编程)。这导致几乎 任何一个问题,JavaScript 都有多种解决方法。阅读本书的过程 中,你会诧异于 JavaScript 语法的灵活性。 JavaScript 的核心语法部分相当精简,只包括两个部分:基本的语 法构造(比如操作符、控制结构、语句)和标准库(就是一系列具有各 种功能的对象比如 Array 还是值得学习,况且它的 入门真的不难。 JavaScript 的性能优势体现在以下方面。 (1)灵活的语法,表达力强。 JavaScript 既支持类似 C 语言清晰的过程式编程,也支持灵活的 函数式编程,可以用来写并发处理(concurrent)。这些语法特性已 经被证明非常强大,可以用于许多场合,尤其适用异步编程。 JavaScript 的所有值都是对象,这为程序员提供了灵活性和便利0 码力 | 540 页 | 3.32 MB | 10 月前3
阮一峰 《ECMAScript 6入门》 第三版变量的解构赋值 字符串的扩展 正则的扩展 数值的扩展 函数的扩展 数组的扩展 对象的扩展 Symbol Set 和 Map 数据结构 Proxy Reflect Promise 对象 Iterator 和 for...of 循环 Generator 函数的语法 Generator 函数的异步应用 async 函数 Class 的基本语法 Class 的继承 Decorator => item + 1); // 转码后 input.map(function (item) { return item + 1; }); 上面的原始代码用了箭头函数,Babel 将其转为普通函数,就能在不支持箭头函数 的 JavaScript 环境执行了。 配置文件 .babelrc Babel 的配置文件是 .babelrc ,存放在项目的根目录下。使用 Babel 的第一步, a[6](); // 10 上面代码中,变量 i 是 var 命令声明的,在全局范围内都有效,所以全局只有一 个变量 i 。每一次循环,变量 i 的值都会发生改变,而循环内被赋给数组 a 的 函数内部的 console.log(i) ,里面的 i 指向的就是全局的 i 。也就是说,所 有数组 a 的成员里面的 i ,指向的都是同一个 i ,导致运行时输出的是最后一 轮的 i0 码力 | 679 页 | 2.66 MB | 1 年前3
ECMAScript规范 第三版 中文版........................................................................................12 4.3.4 构造函数.................................................................................................. .......................................................................................55 10.1.1 函数对象................................................................................................. ........................................................................................58 10.2.3 函数代码.................................................................................................0 码力 | 58 页 | 563.06 KB | 1 年前3
[试读]15天学会JavaScript - 第 2 章
ECMAScript语法基础 ,这点是与 Java 语法 一致的。ECMAScript 语法区分大小写的规定适用于变量、函数名、运算符及其他一切代码。 比如变量 id 与 Id 是不同的;同样,函数 getElementById()与 getElementbyID()也是不同的,而 且 getElementbyID()是无效函数。 2.1.3 代码换行 ECMAScript 语法规定可以在文本字符串中使用反斜杠(\)对代码行进行换行。例如,下 (var s = i + j;),而表达式中的变 量“i”和“j”正是第 02~03 行代码中定义的,表达式运算的结果则会保存在变量“s”中; 第 05 行代码通过 console.log()函数向浏览器控制台输出调试信息(表达式变量“s”的运 算结果)。 运行测试【代码 2-1】所指定的 HTML 页面,并使用浏览器控制台查看调试信息,页面效 果如图 2.1 所示。在浏览器控制台中输出了【代码 s),并进行了初始化 赋值操作。注意,ECMAScript 语法规定可以在一行内定义多个变量,并允许初始化操作,数 据类型也可以不同; 第 03~04 行代码分别通过 console.log()函数向浏览器控制台输出调试信息(变量初始化的 数据内容); 第 05 行代码通过表达式将变量“s”的数据内容赋给了变量“i”。注意这里的数据类型是 不一致的,如果是变量强类型的编程语言(C 语言和0 码力 | 52 页 | 3.83 MB | 1 年前3
廖雪峰JavaScript教程2.6 条件判断 2.7 循环 2.8 Map和Set 2.9 iterable 3 函数 3.1 函数定义和调用 3.2 变量作用域 3.3 方法 3.4 高阶函数 3.4.1 map/reduce 3.4.2 filter 3.4.3 sort 3.5 闭包 3.6 箭头函数 3.7 generator 4 标准对象 4.1 Date 4.2 RegExp 4 z = 5; 10. } 11. } JavaScript本身对嵌套的层级没有限制,但是过多的嵌套无疑会大大增加看懂代码的难度。遇到这种 情况,需要把部分代码抽出来,作为函数来调用,这样可以减少代码的复杂度。 以 // 开头直到行末的字符被视为行注释,注释是给开发人员看到,JavaScript引擎会自动忽略: 1. // 这是一行注释 2. alert('hello'); 比较。 另一个例外是 NaN 这个特殊的Number与所有其他值都不相等,包括它自己: 1. NaN === NaN; // false 唯一能判断 NaN 的方法是通过 isNaN() 函数: 1. isNaN(NaN); // true 最后要注意浮点数的相等比较: 1. 1 / 3 === (1 - 2 / 3); // false 这不是JavaScript的设计缺陷。浮0 码力 | 264 页 | 2.81 MB | 10 月前3
共 51 条
- 1
- 2
- 3
- 4
- 5
- 6













