我有一个像这样的drop-down.vue组件:
<template>
<div @mouseenter="handleEnter" @mouseleave="handleLeave" @click="handleClick" v-click-outside="hide">
<slot name="dropdownBtn" :visible="visible" ></slot>
<slot v-if="visible" name="dropdownWrap" :visible="visible"></slot>
</div>
</template>
...
它是一个下拉组件,然后单击或悬停dropdownBtn dropdownWrap将显示/消除。
现在我有另一个组件需要下拉列表,所以我可以通过两种方式使用下拉列表:
首先:使用嵌套组件
<template>
<ui-dropdown>
<div name="dropdownBtn">...</div>
<div name="dropdownWrap">...</div>
</ui-dropdown>
</template>
...
第二:使用extend
<template>
<!-- the handleEnter and handleLeave are extend from the dropdown component -->
<div>
<div class="btn" @mouseenter="handleEnter" @mouseleave="handleLeave">...</div>
<div class="popup" @mouseenter="handleEnter" @mouseleave="handleLeave">...</div>
</div>
<template>
<script>
import dropdown from '../dropdown';
export default {
extend: dropdown,
...
}
</script>
我认为第一个更好。但第二个比第一个少一个组件,性能会更好吗?
谁能告诉我哪个更好?答案 0 :(得分:5)
这两种方式都有效,我不能说一种方法是正确的,另一方面不是,这取决于你的要求。
<强>扩展强>
ref
的存在,使用正确的CSS类名等等。<强>组合物强>
如果您担心使用合成方法获得额外组件的开销,您可能需要查看functional components。
我很少扩展组件,但是当我这样做时,这是因为我想为一组相关组件共享一个共同的蓝图(基本组件通常不能自行运行,我只是提取出公共代码)。