缘起
vue2中传递给组件的props,如果不在子组件的props设置中,会被添加到子组件的$attrs
过程
<template>
<HelloWorld :test123="'test233'" :test233="'1234'" v-bind="{ test233: '123' }" />
</template>
template在2.6.14中会被转换成
var render = function () {
var _vm = this
var _h = _vm.$createElement
var _c = _vm._self._c || _h
return _c(
"HelloWorld",
_vm._b(
{ attrs: { test123: "test233", test233: "1234" } },
"HelloWorld",
{ test233: "123" },
false
)
)
}
var staticRenderFns = []
render._withStripped = true
export { render, staticRenderFns }
查询文档_b实际上是bindObjectProps,会把动态添加的{ test233: “123” }合并入attrs: { test123: “test233”, test233: “1234” } (仅仅是当前情况,也有其他合并方式,可见详情可见hash[key] = value[key])。_c会执行到rander => _createElement => createComponent
在createComponent过程中通过extractPropsFromVNodeData(data, Ctor, tag)方法,提取真实的props。并且把attrs中的key存在于props配置的删掉。
代码位置
-
上一篇
新版chrome使用新版安卓媒体选择器处理HEIC问题记录and如何科学处理移动端HEIC图片 -
下一篇
小探vue2中为什么使用transition过渡元素时,元素不能show和key同时存在