vue3 入门必知:插件开发全攻略

2026-02-07 0 903

vue3 入门必知:插件开发全攻略

vue3 入门必知:插件开发全攻略

Vue3.0正式版问世已半载,其插件稳定运行,各组件库亦纷纷适配。这是前端开发的一大突破。如今,全面采用Vue3.0的开发应用指日可待。其中,众多新特性与变革亟待我们深入研究。

Vue3.0发展现状

Vue3.0已经拥有了足够的时间,官方插件也趋于稳定,比如vue和vuex都已经升级到了稳定版本。此外,像ant-vue这样的组件库也已经推出了兼容Vue3.0的2.0正式版。移动端组件库也较早地实现了与Vue3.0的兼容。这些情况表明,Vue3.0在项目移植方面具有很大的潜力。越来越多的公司和开发者开始考虑将现有项目升级到Vue3.0,或者直接基于Vue3.0来开发新项目。在具体应用中,许多公司会对Vue3.0的新特性对开发效率和项目维护成本的影响进行评估。

Vue3.0的普及使得相关技术社区愈发热闹。各式各样的开发教程和开源项目层出不穷。比如,一些开源的脚手架工具现在都支持Vue3.0项目创建,默认选项。这对初学者提供了丰富的学习资料,而对于经验丰富的开发者,则提供了更多的参考实例。

新特性之组合式api与选项式api

Vue3.0的一个显著变化是将Vue2的选项式API改为了组合式API。以开发组件为例,Vue2的选项式API遵循着一套既定的结构和流程。然而,组合式API为开发者提供了更多的灵活性。尽管如此,Vue3.0并未完全摒弃选项式API,这为那些习惯传统方式的开发者提供了便利。在具体的项目实践中,有些团队可能会逐步转向使用组合式API,而另一些较为保守的团队则可能继续沿用选项式API。

<div class=\"d-input\" :class=\"rootClass\">
  <div class=\"d-input-placeholder\">{{ placeholder }}</div>
  <input
    ref=\"root\"
    autocomplete=\"new-password\"
    :type=\"type\"
    :readonly=\"readonly\"
    :disabled=\"disabled\"
    :value=\"modelValue\"
    @focus=\"focusHandler\"
    @blur=\"blurHandler\"
    @input=\"inputHandler\"
  >
</div>

在代码编写过程中,组合式API大大简化了逻辑的复用。比如,面对复杂的交互逻辑或数据共享需求,我们可以利用组合式API提取并复用代码。此外,在大型项目中,这种复用特性能有效提升代码的维护性和阅读流畅度。

import { ref, reactive, computed, watchEffect } from 'vue'
import { useInputStatus } from './useInput'
export default {
  name: 'DInput',
  inheritAttrs: false,
  props: {
    modelValue: {
      type: [String, Number],
      default: ''
    },
    placeholder: {
      type: String,
      default: '请输入内容...'
    },
    readonly: {
      type: Boolean,
      default: false
    },
    disabled: {
      type: Boolean,
      default: false
    },
    // 仅支持文本框和密码框
    type: {
      type: String,
      default: 'text',
      validator: (value: string) => ['text', 'password'].includes(value)
    }
  },
  emits: ['update:modelValue', 'focus', 'blur'],
  setup (props: any, { emit }: any) {
    const root = ref(null)
    const status = reactive({
      active: false, // 聚焦 || 有值,placeholder上移,边框变红
      filled: true // 失焦,边框变灰(会同时placeholder上移,边框变灰)
    })
    const isFocus = ref(false)
    const rootClass = computed(() => ({
      active: status.active,
      filled: status.filled
    }))
    watchEffect(() => {
      status.active = isFocus.value || !!props.modelValue
    })
    function focusHandler (e: Event) {
      isFocus.value = true
      useInputStatus(status, props.modelValue, 'focus')
      emit('focus', e)
    }
    function blurHandler (e: Event) {
      isFocus.value = false
      useInputStatus(status, props.modelValue, 'blur')
      emit('blur', e)
    }
    function inputHandler (event: { target: { value: any } }) {
      const { value } = event.target
      emit('update:modelValue', value)
    }
    return {
      root,
      status,
      rootClass,
      focusHandler,
      blurHandler,
      inputHandler
    }
  }
}

新增的emits选项

Vue3.0引入了emits选项。这一选项与props相似,并具备验证功能。在构建组件时,准确指定事件触发的名字至关重要。比如,在用户交互组件中,当点击按钮引发事件时,通过emits选项明确设定事件名称,能使组件逻辑更加明了。

在大型多人协作的开发项目中,emits选项对于代码的规范性扮演着至关重要的角色。若不同开发者编写的组件间缺乏明确的交互事件标准,很容易造成混乱。幸运的是,emits选项为我们提供了一个标准化的定义机制。

jsx在Vue3.0中的应用

在Vue3.0中,某些情况下,使用jsx编写组件会更加灵活。将.vue组件转换为jsx组件需要遵循特定的步骤。尤其是在对性能和灵活性有较高要求的场景中,jsx的优势便尤为明显。比如,在动态生成组件或对组件进行高度定制化渲染时,jsx的表现尤为出色。

实时数据可视化项目里,有时会根据用户输入或数据获取结果,动态生成可视化组件。jsx在这方面能提供直观、简洁的动态逻辑实现。相较传统模板语法,jsx对前端程序员来说更符合JavaScript编写习惯,从而降低了学习难度。

App概念取代Vue.use()方法

import { App } from 'vue'
import DInput from './d-input/DInput.vue'
import DInputJSX from './d-input-jsx'
const components = [DInput, DInputJSX]
const install = (app: App) => {
  components.forEach(component => app.component(component.name, component))
}
export default install

Vue3.0版本弃用了Vue.use(),转而引入了App概念。开发者现在通过创建实例来在应用实例中使用组件。这一改动让代码的组织方式发生了转变。过去,随着大型项目中组件数量和层级的增加,Vue.use()可能会带来一些难以定位的问题。而采用App实例后,组件的组织与管理变得更加清晰易懂。

开发企业级应用时,新结构让项目更加清晰,模块间的依赖关系也更为明确。以电商Web应用为例,其中多处涉及组件的复用和交互,采用App实例方式,能更有效地规划组件的加载与使用顺序。

import { createApp } from 'vue'
import vueDzUi from '@/components/vue3-dz-ui/lib'
createApp(App).use(vueDzUi)

setup函数中的改变

setup函数里没有this的存在,这是一个明显的不同。因此,开发者必须调整在Vue2中养成的编程习惯。比如,在获取组件数据或调用组件方法时,不能再依赖this来快速操作。这样的改变对于提升代码的规范性来说,具有一定的价值。

在Vue3.0中,对于函数式调用组件的处理方式与Vue2有所不同。在Vue2里,这类组件是依托于Vue的特定属性来挂载的。而Vue3.0引入了新的实现方法,尽管有所改变,却有助于框架向更合理的方向发展。谈及Vue3.0在开发组件方面的内容,已经说了不少。那么,在实际开发中,你是否遇到了一些有趣的问题?欢迎点赞、分享这篇文章,并在评论区与我们互动交流。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 vue3 入门必知:插件开发全攻略 https://www.zuozi.net/59122.html

常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务