Vue.js Vuejs:为什么渲染方法返回动态`<;组件>;`犯错误?

Vue.js Vuejs:为什么渲染方法返回动态`<;组件>;`犯错误?,vue.js,Vue.js,我试图从render方法返回vue的内置,但它无法识别组件。可能的错误是什么 Vue.component('comp1'{ 模板:'Component1' }); Vue.组件(“组件2”{ 模板:'Component2' }); 让应用程序=新Vue({ el:“#应用程序”, 数据:函数(){ 返回{ comp:'comp1' } }, 挂载:函数(){ 设置间隔(()=>{ if(this.comp=='comp1'){ this.comp=“comp2” }否则{ this.comp=“

我试图从
render
方法返回vue的内置
,但它无法识别组件。可能的错误是什么

Vue.component('comp1'{
模板:'Component1'
});
Vue.组件(“组件2”{
模板:'Component2'
});
让应用程序=新Vue({
el:“#应用程序”,
数据:函数(){
返回{
comp:'comp1'
}
},
挂载:函数(){
设置间隔(()=>{
if(this.comp=='comp1'){
this.comp=“comp2”
}否则{
this.comp=“comp1”
}
},1000);
},
渲染(h){
返回h('component',this.comp)
}
})

链接到js bin:

替换:

render(h){
     return h('component',this.comp);
   }

模板:“”
更换:

render(h){
     return h('component',this.comp);
   }

模板:“”

在Vue中没有名为
组件的内置组件

Vue需要在模板中创建动态组件的语法。它还需要一种方法来解决DOM模板中需要特定元素作为其他元素的子元素所引起的问题。通过引入
is
属性,这两个问题可以以相同的方式解决

但是,即使通过
is
属性指定了所需的标记名,我们仍然需要在模板中包含标记名。任何标记都可以工作,但惯例是使用标记


使用此约定允许其他开发人员知道标记是动态的。它还使Vue模板编译器更容易优化模板

如果有人试图注册名为
component
的全局组件,Vue将记录一条警告,就像注册其他保留标记名一样。这有助于确保在使用这些标记时没有歧义

然而,这只是一个惯例。使用其他标记可以很好地工作,在DOM模板中有时是必要的,请参阅

但是
渲染
函数呢

传递给函数
h
的第一个参数是标记名。我们不需要使用像
is
属性这样的技巧来使其动态,我们可以直接传递它:

h(本公司)
事实上,如果您编写一个包含
的模板,那么Vue将把它编译成与此非常类似的内容。编译后的
render
函数不保留
is
属性,它将其丢弃,只将其值传递给
h
函数

如果检查编译的模板,您可以亲自看到这一点。例如,您可以使用处的工具查看如何将模板编译为
渲染
函数。函数
\u c
就是您所称的
h


因此,重申一下,没有像
这样的组件。它只是模板语法中其他组件的占位符。当您使用
渲染
功能时,您应该直接使用所需的组件。

在Vue中没有名为
组件
的内置组件

Vue需要在模板中创建动态组件的语法。它还需要一种方法来解决DOM模板中需要特定元素作为其他元素的子元素所引起的问题。通过引入
is
属性,这两个问题可以以相同的方式解决

但是,即使通过
is
属性指定了所需的标记名,我们仍然需要在模板中包含标记名。任何标记都可以工作,但惯例是使用标记


使用此约定允许其他开发人员知道标记是动态的。它还使Vue模板编译器更容易优化模板

如果有人试图注册名为
component
的全局组件,Vue将记录一条警告,就像注册其他保留标记名一样。这有助于确保在使用这些标记时没有歧义

然而,这只是一个惯例。使用其他标记可以很好地工作,在DOM模板中有时是必要的,请参阅

但是
渲染
函数呢

传递给函数
h
的第一个参数是标记名。我们不需要使用像
is
属性这样的技巧来使其动态,我们可以直接传递它:

h(本公司)
事实上,如果您编写一个包含
的模板,那么Vue将把它编译成与此非常类似的内容。编译后的
render
函数不保留
is
属性,它将其丢弃,只将其值传递给
h
函数

如果检查编译的模板,您可以亲自看到这一点。例如,您可以使用处的工具查看如何将模板编译为
渲染
函数。函数
\u c
就是您所称的
h


因此,重申一下,没有像
这样的组件。它只是模板语法中其他组件的占位符。当您使用
渲染
函数时,您应该直接使用所需的组件。

看起来您只需要
h(this.comp)
,不需要
“组件”
部分。@skille我希望组件在嵌套数组中的某个位置渲染。所有自定义组件都可以通过render方法识别,我想知道为什么Vue无法识别render(h){return h('component',this.comp);}。看起来您只需要
h(this.comp)
,而不需要
'component'
部分。@我希望在嵌套数组中的某个位置渲染组件。所有自定义组件都可以通过render方法识别,我想知道为什么Vue无法识别render(h){return h('component',this.comp);}。是的,这是可行的,但模板更复杂,我希望
组件
能够在