vue重写组件实现
重写 Vue 组件的方法
方法一:使用 extends 继承原有组件
通过 extends 可以基于现有组件扩展新功能,保留原有逻辑的同时添加或覆盖部分配置。
// 原始组件
const BaseComponent = {
template: '<div>Original Component</div>'
};
// 重写组件
const ExtendedComponent = {
extends: BaseComponent,
template: '<div>Rewritten: {{ message }}</div>',
data() {
return { message: 'Extended Component' };
}
};
方法二:通过 mixins 混入逻辑
合并多个组件的选项,适合复用通用逻辑或覆盖生命周期钩子。

const myMixin = {
created() {
console.log('Mixin hook executed');
}
};
const RewrittenComponent = {
mixins: [myMixin],
template: '<div>Mixed-in Component</div>'
};
方法三:完全重构组件
直接创建一个新组件替代旧组件,适用于需要彻底修改的场景。

const NewComponent = {
template: '<div>New Implementation</div>',
methods: {
customMethod() {
// 新逻辑
}
}
};
方法四:动态组件替换
利用 <component :is="currentComponent"> 动态切换组件实现逻辑替换。
<component :is="isRewritten ? RewrittenComponent : OriginalComponent" />
注意事项
- 重写时需确保兼容原有组件的
props和事件接口。 - 若使用第三方组件库,优先通过封装(Wrapper)而非直接修改源码。
- 覆盖生命周期钩子时,避免完全替换原有逻辑,可通过调用
this.$options.methods.originalHook保留原始行为。
代码示例:封装第三方组件
// 封装 Element UI 的 Button 组件
export default {
name: 'CustomButton',
props: {
danger: Boolean // 新增自定义 prop
},
render(h) {
return h('el-button', {
props: { ...this.$props, type: this.danger ? 'danger' : '' },
on: { click: this.handleClick }
}, this.$slots.default);
},
methods: {
handleClick() {
this.$emit('click');
// 自定义逻辑
}
}
};






