Vue2.x如何开启CompositionAPI并用tsx实现长尾词功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1990个文字,预计阅读时间需要8分钟。
Vue2.x引入Composition API和tsx,我猜你可能是一个更偏向于React开发的开发者。你可能已经深深感受到了Hooks带来的逻辑复用、响应式编程等多种便利。
?Vue2.x开启CompositionAPI、tsx-前言我猜你可能是一个更偏向于个React开发者我猜你可能深深的感受到了Hooks带来的逻辑复用、响应式编程的种种便利前言
- 目的 本文是从 React 使用者视角带你解锁 Vue2 中开启 Composition API ? 并使用 TSX ? 地开发模式 ?
- 希望 本文能助你一臂之力 ? 不要慌,你还可以继续治疗 ?
目标
- 使用 Vue2 工程模板加入 Composition API 插件
- 开启 .ts、.tsx 支持
初始化项目
略 ~
加入 Composition API plugin
- 添加依赖
开启 ts、tsx 支持
本项目使用的 Babel@7.x
- 添加依赖
- 修改配置文件
修改 App.vue -> App.tsx
- .vue 文件和 .tsx 可以看成是等价的,直接使用即可;注意 jsx 中组件标签首字母一定要大写!
- .png 静态资源用法就是直接引入,底层通过 url-loader 处理;@vue/cli 集成了静态资源配置
- 注意!setup 中不支持 (setup 中没有 this) tsx, 必须写在 render 中
- 启动下项目看看效果吧~ ?
Notes
- 完整 Demo 戳 github
- Demo 使用API api.github.com/users
- User 定义如下
写一个 Component
import { Row, Col, Image } from 'vant'export default defineComponent({ props: { users: { type: Array as { (): User[] }, // 提供调用处的类型推到 default: [], }, }, render() { return ( {this.users.map((user, idx) => ( this.$emit('click', user)} > {user.login} ))} ) },})写一个 Hooks
- 如果你写过 React Hooks 那么你已经大概知道怎么写的了
- 它看起来像个普通的 函数式 组件,一般意义的函数式组件返回 VNode,Hooks 返回 状态
- 这俩个框架的 Hooks/Composition API 设计真的很相似,就像现在的 Android 和 iOS 系统 ?
与 React Hooks 的对比
整体上更符合 Javascript 的直觉;不受调用顺序的限制,可以有条件地被调用;不会在后续更新时不断产生大量的内联函数而影响引擎优化或是导致 GC 压力;不需要总是使用 useCallback 来缓存传给子组件的回调以防止过度更新;不需要担心传了错误的依赖数组给 useEffect/useMemo/useCallback 从而导致回调中使用了过期的值 —— Vue 的依赖追踪是全自动的。写一个 Hooks with Component
How and why?
试想一下我们写一个 Component
- 收益: 能复用 UI 展示,内部能够有自己的逻辑、状态
- 弊端: 内部逻辑、状态对外通讯 需要有一定的手段 处理,Vue、React 均是如此
试想一下我们写一个 Hooks
- 收益: 提供逻辑复用、调用处状态自动更新
能不能把 Hooks、Component 的收益放到一起呢?(成年人的世界选择全要?)Function Component、Hooks 只是返回值看起来不一样而已;要是我们 “两者都返回” 怎么样?
- 收益: 能复用 UI 展示,内部能够有自己的逻辑、状态
- 借助响应式设计会 自动吐出来 内部状态
- 而不再是使用组件的种种通讯方式去 手动捞出来 内部状态
基于 vant 设计一个 useCalendar
- 至此,我们可以在回答 Hooks 的面试题时候来一句:“Hooks 除了逻辑复用,还能实现 UI 复用”相信你对工作中一些场景是该封装 Component 还是 Hooks 会有了一个新的参考 ?
个人关于 Vue 的 Composition API 看法
- 设计更贴近 响应式编程 就像没有 operator 的 rxjs;有那味儿 ~
- ref、reactive 数据源为 可观察对象;模板、component、watch 这些可以视为订阅者
- watch、watchEffect 设计又和 mobx 中的 reaction、autorun 行为基本一致
个人关于 React 的 Hooks 看法
- React 的 Hooks 在 setState 后重复调用当前组件(函数),通过执行当前组件内的 useEffect、useMemo 并对比 deps 决定是否 “响应”; 模拟了 响应式 设计
- 引用官网的一句话 ~ (可能你木有注意到哦)
VSCode 配置
- emmet 生成 class 而不是 className
参考文章
- 用于提供 组合式 API 的 Vue 2 插件
- Configurable preset for Vue JSX plugins
- 在Vue中使用JSX的正确姿势
本文共计1990个文字,预计阅读时间需要8分钟。
Vue2.x引入Composition API和tsx,我猜你可能是一个更偏向于React开发的开发者。你可能已经深深感受到了Hooks带来的逻辑复用、响应式编程等多种便利。
?Vue2.x开启CompositionAPI、tsx-前言我猜你可能是一个更偏向于个React开发者我猜你可能深深的感受到了Hooks带来的逻辑复用、响应式编程的种种便利前言
- 目的 本文是从 React 使用者视角带你解锁 Vue2 中开启 Composition API ? 并使用 TSX ? 地开发模式 ?
- 希望 本文能助你一臂之力 ? 不要慌,你还可以继续治疗 ?
目标
- 使用 Vue2 工程模板加入 Composition API 插件
- 开启 .ts、.tsx 支持
初始化项目
略 ~
加入 Composition API plugin
- 添加依赖
开启 ts、tsx 支持
本项目使用的 Babel@7.x
- 添加依赖
- 修改配置文件
修改 App.vue -> App.tsx
- .vue 文件和 .tsx 可以看成是等价的,直接使用即可;注意 jsx 中组件标签首字母一定要大写!
- .png 静态资源用法就是直接引入,底层通过 url-loader 处理;@vue/cli 集成了静态资源配置
- 注意!setup 中不支持 (setup 中没有 this) tsx, 必须写在 render 中
- 启动下项目看看效果吧~ ?
Notes
- 完整 Demo 戳 github
- Demo 使用API api.github.com/users
- User 定义如下
写一个 Component
import { Row, Col, Image } from 'vant'export default defineComponent({ props: { users: { type: Array as { (): User[] }, // 提供调用处的类型推到 default: [], }, }, render() { return ( {this.users.map((user, idx) => ( this.$emit('click', user)} > {user.login} ))} ) },})写一个 Hooks
- 如果你写过 React Hooks 那么你已经大概知道怎么写的了
- 它看起来像个普通的 函数式 组件,一般意义的函数式组件返回 VNode,Hooks 返回 状态
- 这俩个框架的 Hooks/Composition API 设计真的很相似,就像现在的 Android 和 iOS 系统 ?
与 React Hooks 的对比
整体上更符合 Javascript 的直觉;不受调用顺序的限制,可以有条件地被调用;不会在后续更新时不断产生大量的内联函数而影响引擎优化或是导致 GC 压力;不需要总是使用 useCallback 来缓存传给子组件的回调以防止过度更新;不需要担心传了错误的依赖数组给 useEffect/useMemo/useCallback 从而导致回调中使用了过期的值 —— Vue 的依赖追踪是全自动的。写一个 Hooks with Component
How and why?
试想一下我们写一个 Component
- 收益: 能复用 UI 展示,内部能够有自己的逻辑、状态
- 弊端: 内部逻辑、状态对外通讯 需要有一定的手段 处理,Vue、React 均是如此
试想一下我们写一个 Hooks
- 收益: 提供逻辑复用、调用处状态自动更新
能不能把 Hooks、Component 的收益放到一起呢?(成年人的世界选择全要?)Function Component、Hooks 只是返回值看起来不一样而已;要是我们 “两者都返回” 怎么样?
- 收益: 能复用 UI 展示,内部能够有自己的逻辑、状态
- 借助响应式设计会 自动吐出来 内部状态
- 而不再是使用组件的种种通讯方式去 手动捞出来 内部状态
基于 vant 设计一个 useCalendar
- 至此,我们可以在回答 Hooks 的面试题时候来一句:“Hooks 除了逻辑复用,还能实现 UI 复用”相信你对工作中一些场景是该封装 Component 还是 Hooks 会有了一个新的参考 ?
个人关于 Vue 的 Composition API 看法
- 设计更贴近 响应式编程 就像没有 operator 的 rxjs;有那味儿 ~
- ref、reactive 数据源为 可观察对象;模板、component、watch 这些可以视为订阅者
- watch、watchEffect 设计又和 mobx 中的 reaction、autorun 行为基本一致
个人关于 React 的 Hooks 看法
- React 的 Hooks 在 setState 后重复调用当前组件(函数),通过执行当前组件内的 useEffect、useMemo 并对比 deps 决定是否 “响应”; 模拟了 响应式 设计
- 引用官网的一句话 ~ (可能你木有注意到哦)
VSCode 配置
- emmet 生成 class 而不是 className
参考文章
- 用于提供 组合式 API 的 Vue 2 插件
- Configurable preset for Vue JSX plugins
- 在Vue中使用JSX的正确姿势

