我遇到了Vue 3(alpha 4)的问题:
在setup()
函数中,我试图读取父组件.根据https://vue-composition-api-rfc.netlify.com/api.html#setup上的文档,它应该通过context
参数公开父对象,或者作为上下文的属性.ATTR或直接作为父项(参见"键入"下的SetupContext
位).我觉得文档中不太清楚parent
是应该直接从SetupContext
访问,还是通过SetupContext.attrs
访问,所以我try 了两种方法,但都没有用.
这里是我的问题,我可以访问SetupContext
和SetupContext.attrs
(这是一个代理),只要在记录它们时就可以了.SetupContext.attrs
显示通常的代理属性([[Handler]]
、[[Target]]
和[[IsRevoked]]
),当判断[[Target]]
时,它清楚地显示父对象property.
但在记录父级时,它只打印未定义的内容:
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来重现这个问题