10 个技巧和窍门助你成为更优秀的 VueJS 开发者

2025-05-26

10 个技巧和窍门助你成为更优秀的 VueJS 开发者

介绍

我非常喜欢使用 VueJS,每次使用框架时,我都乐于深入研究它的功能和特性。在这篇文章中,我将向你介绍 10 个你可能还不知道的实用技巧,并尝试帮助你成为更优秀的 Vue 开发者。

插槽语法变得漂亮

Vue 2.6 引入了一种插槽的简写符号,可以像事件一样使用(例如,@click 表示 v-on:click 事件),也可以像绑定一样使用冒号符号 (:src)。例如,如果你有一个 Table-Component,你可以按如下方式使用此功能:

<template>
  ...
  <my-table>
    <template #row="{ item }">
      /* some content here. You can freely use 'item' here */
    </template>
  </my-table>
  ...
</template>
Enter fullscreen mode Exit fullscreen mode

$on('hook:')

如果您想在 created 或 loaded 钩子中定义自定义事件监听器或第三方插件,并需要在 beforeDestroy 钩子中将其移除以避免内存泄漏,那么这是一个非常有用的功能。使用 $on('hook:') 方法,您只需在一个生命周期方法中定义/移除事件,而无需两次。

mounted() {
 const aThirdPartyPlugin = aThirdPartyPlugin()
 this.$on('hook:beforeDestroy', () => {
  aThirdPartyPlugin.destroy()
 })
}

Enter fullscreen mode Exit fullscreen mode

Prop 验证

你可能已经知道,你可以将 props 验证为原始类型,例如 String、Number 甚至 Object。但你也可以使用自定义验证器,例如,如果你想要验证一个字符串列表:

alertType: {
 validator: value => ['signup', 'login', 'logout'].includes(value)
}
Enter fullscreen mode Exit fullscreen mode

动态指令参数

Vue 2.6 最酷的功能之一是可以动态地将指令参数传递给组件。想象一下,你有一个 Button 组件,希望在某些情况下监听 Click 事件,而在其他情况下监听 DoubleClick 事件。这时,这些指令就派上用场了:

<template>
  ...
  <aButton @[someEvent]="handleSomeEvent()"/>
  ...
</template>

<script>
  ...
  data(){
    return{
      ...
      someEvent: someCondition ? "click" : "dblclick"
    }
  },

  methods:{
    handleSomeEvent(){
      // handle some event
    }
  }
  ...
</script>

Enter fullscreen mode Exit fullscreen mode

而且还有什么是真正整洁的 --> 您可以将相同的模式应用于动态 HTML 属性、道具等等!

对同一路由重复使用组件

有时,不同的路由会共享一些组件。如果在这些路由之间切换,共享的组件默认不会重新渲染,因为 Vue 出于性能考虑会复用该组件。但如果您仍然希望这些组件重新渲染,可以通过为 Router-View-Component 提供一个 :key 属性来实现。

<template>
 <router-view :key="$route.fullPath"></router-view>
</template>
Enter fullscreen mode Exit fullscreen mode

父母给孩子的所有道具

这是一个非常酷的功能,允许你将父组件的所有 props 传递给子组件。如果你有另一个组件的 Wrapper-Component,这个功能会特别方便。因此,你不用一个一个地传递所有 props,而是可以一次传递所有 props:

<template>
  <childComponent v-bind="$props"/>
</template>
Enter fullscreen mode Exit fullscreen mode

而不是:

<template>
  <childComponent  :prop1="prop1"
                   :prop2="prop2"
                   :prop3="prop3"
                   :prop4="prop4"
                   ...
  />
</template>
Enter fullscreen mode Exit fullscreen mode

从父级到子级的所有事件监听器

如果您有一个不在父组件根部的子组件,您可以将所有事件监听器从父组件传递到子组件,如下所示:

<template>
  <div>
    ...
    <childComponent v-on="$listeners"/>
    ...
  </div>
</template>
Enter fullscreen mode Exit fullscreen mode

如果子组件位于其父组件的根,它将默认获取这些,并且您不需要这个小技巧。

$创建元素

每个 Vue 实例默认都可以访问 $createElement 方法来创建并返回虚拟节点。例如,可以利用该方法在通过 v-html 指令传递的方法中使用标记。在函数式组件中,该方法可以作为 render 函数的第一个参数进行访问。

使用 JSX

从 Vue CLI 3 开始,它默认支持 JSX,因此如果您愿意(甚至可能来自 React),现在就可以用 JSX 编写代码,这在编写函数式组件等情况下非常方便。如果您尚未使用 Vue CLI 3,可以使用 babel-plugin-transform-vue-jsx 来获得 JSX 支持!

自定义 v-model

默认情况下,V-model 是我们所说的 @input 事件监听器和 :value 属性的语法糖。但你可以在 Vue 组件中指定一个“model”属性来定义要使用的事件和值属性——太棒了!

export default: {
 model: {
  event: 'change',
  prop: 'checked'
 }
}
Enter fullscreen mode Exit fullscreen mode

结论

我希望能给你一些建议,帮助你成为一名更优秀的 VueJS 开发者。如果你也对 React 开发感兴趣,可以看看我的博文《10 个让你成为更优秀 ReactJS 开发者的技巧和诀窍》。欢迎留言并关注我,获取更多后续文章!

文章来源:https://dev.to/simonholdorf/10-tips-tricks-to-make-you-a-better-vuejs-developer-4n4d
PREV
10 个 Vue 指令让您的开发生活更轻松!
NEXT
10 个技巧和窍门助你成为更优秀的 ReactJS 开发者