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

2024-11-14 0 321

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在开发组件方面的内容,已经说了不少。那么,在实际开发中,你是否遇到了一些有趣的问题?欢迎点赞、分享这篇文章,并在评论区与我们互动交流。

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

七爪网 行业资讯 vue3 入门必知:插件开发全攻略 https://www.7claw.com/2795215.html

七爪网源码交易平台

相关文章

发表评论
暂无评论
官方客服团队

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