【问题标题】:What's the "reference" refering to in vue functional component?vue 功能组件中的“参考”指的是什么?
【发布时间】:2020-04-24 04:07:35
【问题描述】:

最近在看vue的文档,在看功能组件的时候,发现有这样一句话:

注意:在 2.3.0 之前的版本中,如果您希望在功能组件中接受 props,则需要 props 选项。在 2.3.0+ 中可以省略 props 选项,组件节点上的所有属性都将被隐式提取为 props。

与功能组件一起使用时,引用将是 HTMLElement,因为它们是无状态和无实例的。

可以查看原文档here。

我对第二个引用中的“参考”一词感到非常困惑,这个“参考”是什么意思?

希望有人能帮我弄清楚,谢谢我的朋友:)

【问题讨论】:

  • 对我来说也没有多大意义,但我建议这是在 their forums 上问的问题

标签: vue.js vuejs2


【解决方案1】:

我不是 100% 确定,但我认为它指的是这种情况:

Vue.component('functional', {
  functional: true,
  render(h, ctx) {
    return h('button', ctx.data, ctx.children)
  }
})

Vue.component('full', {
  template: '<button><slot/></button>'
})

new Vue({
  el: '#app',
  mounted() {
    console.log(this.$refs.func instanceof HTMLElement)
    console.log(this.$refs.full instanceof Vue)
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
  <functional ref="func">Functional</functional>
  <full ref="full">Full</full>
</div>

如果你得到一个函数组件的引用,你可能不会得到一个组件实例,因为函数组件本身没有一个组件实例。

最好将函数式组件视为一个函数。它不是一个“真正的”组件。

返回的 ref 取决于功能组件的实现方式。功能组件的渲染函数负责将ref 数据传递给它所渲染的子组件之一。在上面的示例中,ctx.data.ref 等于 'func' 并被分配给 &lt;button&gt;,因此在根组件中 this.$refs.func 等于该 DOM 元素。如果我没有将ctx.data 传递给按钮,那么this.$refs.func 将永远是undefined。

【讨论】:

  • 这很有意义,并且适合在文档中添加注释的一些早期版本的 PR (github.com/vuejs/vuejs.org/pull/2145)。进行一些明确的更改肯定会更好
  • 但是如果我将return h('button', ctx.data, ctx.children)替换为return h('full', ctx.data, ctx.children),那么this.$refs.func现在实际上是指一个vue组件?
猜你喜欢
  • 2017-11-23
  • 2020-02-13
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 2020-05-23
  • 2018-07-17
  • 2012-11-28
相关资源
最近更新 更多