【发布时间】:2020-06-01 21:04:17
【问题描述】:
我遇到了 Vue 3 (alpha 4) 的问题:
在setup() 函数中,我试图读取父组件。根据https://vue-composition-api-rfc.netlify.com/api.html#setup 上的文档,它应该通过context 参数公开父级,或者作为context.attrs 的属性或直接作为父级(参见'typing' 下的SetupContext 位)。我没有发现文档很清楚是否应该直接从SetupContext 或通过SetupContext.attrs 访问parent,所以我尝试了两种方式,但无济于事。
这是我的问题,我可以在登录 SetupContext 和 SetupContext.attrs(这是一个代理)时访问它们。 SetupContext.attrs 公开了通常的代理属性([[Handler]]、[[Target]] 和 [[IsRevoked]]),并且在检查 [[Target]] 时,它清楚地显示了父级 property。
但是,当记录父级时,它只是打印出 undefined:
export default {
setup(props, context) {
console.log(context);
// Output: {attrs: Proxy, slots: Proxy, emit: ƒ}
console.log(context.attrs);
// Output: Proxy {vnode: {…}, parent: {…}, appContext: {…}, type: {…}, root: {…}, …}
console.log(context.attrs.parent);
// Output: undefined
}
};
传播上下文会产生相同的结果:
export default {
setup(props, { attrs, parent }) {
console.log(attrs);
// Output: Proxy {vnode: {…}, parent: {…}, appContext: {…}, type: {…}, root: {…}, …}
console.log(attrs.parent);
// Output: undefined
console.log(parent);
// Output: undefined
}
};
我对 JavaScript 中的代理有点陌生,但从我读过的关于它们的内容来看,以及尝试使用 reactive() 返回的代理。我应该能够像通常使用对象一样访问该属性。关于我做错了什么有什么想法吗?
我创建了一个codesandbox 来重现问题
【问题讨论】:
-
如果您在
attrs中看到parent属性但attrs.parent未定义,那么这是因为attrs在您登录后被填充。您可以尝试将代码放入onMounted挂钩中。 -
好建议@Paleo,我刚刚尝试过,但即使在 onMounted() 中,不幸的是两者都未定义。
-
我这里也有同样的问题,无法在我的App组件中访问Proxy对象的目标github.com/blacksonic/todomvc-vue-composition-api/blob/master/…
标签: vue.js vuejs3 vue-composition-api