最近有人问我如何在Vue组件中创建样式变体,虽然这看起来是一个简单的问题,但我深入探讨后发现有多种方法可以实现。在本文中,我将介绍四种常见的实现方式,这不应该被视为完整的列表,而是一个很好的起点。
在这个例子中,我们通过传递variant属性到绑定的class来创建这个简单的按钮组件。传递的属性字符串通过组件内部的computed属性来构建CSS类名。
这里是一个演示如何将variant属性传递给组件的例子:
使用TypeScript在这个例子中,我们可以确保这个组件的用户只能使用三种可能的变体:primary、secondary、error,任何不匹配这些的字符串都会向开发者抛出TS错误。
<BaseButton variant="primary" />
:class="[baseClass, variantClass, { disabled: isDisabled }]"
:class="['btn', sizeClass, colorClass, { 'btn-disabled': disabled }]"
这个例子是Vue 3特有的。在这个例子中,我们不是传递variant属性,而是传递特定的样式属性,在这种情况下是bgColor。使用v-bind,我们能够将传递的属性应用到我们的CSS中作为background-color的响应式属性。在这个例子中,点击按钮将在紫色和橙色之间交替背景。这个例子还允许通过props传入自定义的bgColor。