vue如何实现代码复用
在Vue中实现代码复用可以通过多种方式实现,以下是一些常见且高效的方法:
使用组件
将可复用的UI和逻辑封装成组件,通过props传递数据,emit触发事件。组件化是Vue的核心特性,适合复用UI结构和基础逻辑。
<template>
<Button :text="submitText" @click="handleSubmit" />
</template>
<script>
import Button from './Button.vue';
export default {
components: { Button },
data() {
return { submitText: 'Submit' };
},
methods: {
handleSubmit() {
console.log('Submitted');
}
}
};
</script>
使用混入(Mixins)
混入允许将公共逻辑注入多个组件中。适合复用方法、生命周期钩子或数据属性,但需注意命名冲突问题。

// mixin.js
export const formMixin = {
data() {
return { loading: false };
},
methods: {
submitForm() {
this.loading = true;
// 提交逻辑
}
}
};
// 组件中使用
import { formMixin } from './mixin';
export default {
mixins: [formMixin]
};
使用自定义指令
封装DOM操作逻辑为指令,适用于复用底层DOM操作,如表单验证、权限控制等。
// 全局注册指令
Vue.directive('focus', {
inserted(el) {
el.focus();
}
});
// 使用
<input v-focus />
使用插件
将全局功能(如工具函数、过滤器)封装为插件,通过Vue.use()注入。适合复用全局逻辑或第三方库集成。

// plugin.js
export default {
install(Vue) {
Vue.prototype.$formatDate = (date) => {
return new Date(date).toLocaleString();
};
}
};
// main.js
import plugin from './plugin';
Vue.use(plugin);
// 组件中使用
this.$formatDate(new Date());
使用组合式API(Vue 3)
通过setup和composables提取响应式逻辑,实现高内聚低耦合的代码复用。适合复杂逻辑的拆分和组合。
// useCounter.js
import { ref } from 'vue';
export function useCounter() {
const count = ref(0);
const increment = () => count.value++;
return { count, increment };
}
// 组件中使用
import { useCounter } from './useCounter';
export default {
setup() {
const { count, increment } = useCounter();
return { count, increment };
}
};
使用Slot插槽
通过具名插槽或作用域插槽复用模板结构,同时允许父组件定制部分内容。
<!-- BaseLayout.vue -->
<template>
<div>
<slot name="header"></slot>
<slot :user="user"></slot>
</div>
</template>
<!-- 使用 -->
<BaseLayout>
<template #header>
<h1>Custom Header</h1>
</template>
<template v-slot:default="{ user }">
<p>User: {{ user.name }}</p>
</template>
</BaseLayout>
使用Provide/Inject
跨层级组件共享数据,避免逐层传递props。适合深层嵌套组件的状态管理。
// 祖先组件
export default {
provide() {
return { theme: 'dark' };
}
};
// 后代组件
export default {
inject: ['theme'],
created() {
console.log(this.theme); // 'dark'
}
};
根据具体场景选择合适的方式:简单UI复用用组件,逻辑复用用混入或组合式API,全局功能用插件,跨组件通信用Provide/Inject。组合式API在Vue 3中是更现代和灵活的解决方案。






