1.11.4 非 Prop 特性
优质
小牛编辑
136浏览
2023-12-01
所谓非 prop 特性,就是指它可以直接传入组件,而不需要定义相应的 prop。
尽管为组件定义明确的 prop 是推荐的传参方式,组件的作者却并不总能预见到组件被使用的场景。所以,组件可以接收任意传入的特性,这些特性都会被添加到组件的根元素上。
例如,假设我们使用了第三方组件bs-date-input
,它包含一个 Bootstrap 插件,该插件需要在input
上添加data-3d-date-picker
这个特性。这时可以把特性直接添加到组件上 (不需要事先定义prop
):
<bs-date-input data-3d-date-picker="true"></bs-date-input>
添加属性data-3d-date-picker="true"
之后,它会被自动添加到bs-date-input
的根元素上。
替换/合并现有的特性
假设这是bs-date-input
的模板:
<input type="date" class="form-control">
为了给该日期选择器插件增加一个特殊的主题,我们可能需要增加一个特殊的 class,比如:
<bs-date-input data-3d-date-picker="true" class="date-picker-theme-dark" ></bs-date-input>
在这个例子当中,我们定义了两个不同的class
值:
form-control
,来自组件自身的模板date-picker-theme-dark
,来自父组件
对于多数特性来说,传递给组件的值会覆盖组件本身设定的值。即例如传递type="large"
将会覆盖type="date"
且有可能破坏该组件!所幸我们对待class
和style
特性会更聪明一些,这两个特性的值都会做合并 (merge) 操作,让最终生成的值为:form-control date-picker-theme-dark
。