Vue: 当组件没有道具时,$ attrs是未定义的

创建于 2017-08-01  ·  8评论  ·  资料来源: vuejs/vue

2.4.2

复制链接

https://jsfiddle.net/50wL7mdz/50757/

重现步骤

当没有提供道具时,在组件上下文中将$ attrs作为对象访问。

期望什么?

$ attrs是一个包含无法识别的道具的对象。 因此,当在组件标签上未指定任何道具时,我期望一个空对象。

实际发生了什么?

$ attrs是未定义的

最有用的评论

刚遇到这个问题,对我来说绝对是意外的, $attrs应该是undefined

例如,如果您编写的待办事项应用程序没有待办事项开始,那么使列表以undefined而不是[]开头将是很奇怪的。 您必须在整个应用中添加if语句(或可选的链接)。 这种情况是相似的。

对于小众情况,当用户想要检查是否有$attrs存在时,仍然可以使用Object.keys($attrs).length ,因此该情况​​仍然适用。

确实使我确信这是一个错误的部分是,当将prop传递给组件时$attrs _is_设置为空对象-正如OP指出的那样。 因此,目前,要真正检查是否存在$attrs需要两种策略:

$attrs && Object.keys($attrs).length

所有8条评论

出于好奇,拥有未定义的$attrs会面对什么问题? 您正在访问$attrs.something吗? (如果是这样,为什么?)

编辑:我也在问,因为没有attrs时,未定义的$attrs相等实际上是有用的

@greegus ,如果您正在执行if ($attrs.myProp) ,则可以使用babel-plugin-transform-optional-chaining来执行if ($attrs?.myProp)

我认为这是预期的行为,但这值得商bat。

ping @greegus

刚遇到这个问题,对我来说绝对是意外的, $attrs应该是undefined

例如,如果您编写的待办事项应用程序没有待办事项开始,那么使列表以undefined而不是[]开头将是很奇怪的。 您必须在整个应用中添加if语句(或可选的链接)。 这种情况是相似的。

对于小众情况,当用户想要检查是否有$attrs存在时,仍然可以使用Object.keys($attrs).length ,因此该情况​​仍然适用。

确实使我确信这是一个错误的部分是,当将prop传递给组件时$attrs _is_设置为空对象-正如OP指出的那样。 因此,目前,要真正检查是否存在$attrs需要两种策略:

$attrs && Object.keys($attrs).length

@chrisvfritz说服了我-这是一个错误。

@LinusBorg似乎目前没有人在研究此错误。 我可以为此做个公关吗?

当然!

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

franciscolourenco picture franciscolourenco  ·  3评论

seemsindie picture seemsindie  ·  3评论

6pm picture 6pm  ·  3评论

loki0609 picture loki0609  ·  3评论

bdedardel picture bdedardel  ·  3评论