【问题标题】:A question about Vue.js source code in function _createElement()关于函数 _createElement() 中 Vue.js 源码的一个问题
【发布时间】:2020-08-23 19:33:42
【问题描述】:

_createElement,我想问一下data.isv-bind:is是否一样?

https://github.com/vuejs/vue/blob/0baa129d4cad44cf1847b0eaf07e95d4c71ab494/src/core/vdom/create-element.js#L64

为什么是tag = data.is

感谢每一位回复者!

【问题讨论】:

  • 他们不一样
  • 它们并不完全相同。它们是收敛到同一点的替代方法:将tag 设置为组件的根元素。你的用例是什么?你想达到什么目的?参考:"为什么 "tag = data.is""。因为在渲染函数内部,可以设置标记的方法之一是在提供给createElement 函数的data 对象中使用is。这就是为什么(从技术上讲),当您将 Vue 组件指定为 createElement 的第一个参数时,它会呈现该组件。

标签: vue.js vue-component


【解决方案1】:

正如代码中的注释所示,该行专门用于处理is 包含在对象v-bind 中的情况。例如:

<component v-bind="{ is: 'button' }">Button</component>

您可以通过在浏览器中的该行设置断点来亲自查看。我正在使用 Webpack 和 Chrome,相关文件出现在 Sources 选项卡中的 webpack:///./node_modules/vue/dist/vue.esm.js 下。快速搜索_createElement,在空白处点击设置断点。

在上面的示例中,is 值旨在用作tag,而component 只是一个可以丢弃的虚拟标签。

上面的语法等价于:

<component is="button">Button</component>

或:

<button>Button</button>

但是,这两个示例都不会进入相关的if 部分。在其他两种情况下,tag 在此之前已经正确解析。

【讨论】:

  • 非常感谢
猜你喜欢
  • 1970-01-01
  • 2011-05-10
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多