Vue: コンポーネントに小道具がない場合、$ attrsは未定義です

作成日 2017年08月01日  ·  8コメント  ·  ソース: vuejs/vue

バージョン

2.4.2

複製リンク

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

再現する手順

小道具が提供されていない場合は、コンポーネントコンテキスト内のオブジェクトとして$ attrsにアクセスします。

何が期待されますか?

$ attrsは、認識されない小道具を含むオブジェクトです。 したがって、コンポーネントタグに小道具が指定されていない場合は、空のオブジェクトが必要になります。

実際に何が起こっているのですか?

$ attrsは未定義です

bug

最も参考になるコメント

これに遭遇したばかりで、 $attrsundefinedなることは私にとって間違いなく予想外

あなたがいないドスで始まりTODOアプリを書いていた場合、リストを作ることは非常に奇妙なように始まるundefinedの代わりに[] 。 アプリ全体にifステートメント(またはオプションのチェーン)を追加する必要があります。 この場合も同様です。

ユーザーが$attrsが存在するかどうかを確認したいニッチなケースでは、 Object.keys($attrs).lengthを使用できるので、そのケースは引き続きカバーされます。

しかし、これがバグであると私に本当に納得させる部分は、OPが指摘しているように、小道具がコンポーネントに渡されるときに$attrs _ is_が空のオブジェクト設定されることです。 したがって、現在、 $attrsが存在するかどうかを実際に確認するには、次の両方の戦略が必要です。

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

全てのコメント8件

好奇心から、未定義の$attrsを持つことで、どのような問題に直面していますか? $attrs.somethingアクセスしていますか? (もしそうなら、なぜ?)

編集:属性がないときに$attrs未定義であることが実際に役立つ可能性があるため、私も質問しています

@greegusif ($attrs.myProp)ようなことをしている場合は、 babel-plugin-transform-optional-chainingを使用してif ($attrs?.myProp)実行できます

これは予想される動作であると判断しますが、議論の余地があります。

ping @greegus

これに遭遇したばかりで、 $attrsundefinedなることは私にとって間違いなく予想外

あなたがいないドスで始まりTODOアプリを書いていた場合、リストを作ることは非常に奇妙なように始まるundefinedの代わりに[] 。 アプリ全体にifステートメント(またはオプションのチェーン)を追加する必要があります。 この場合も同様です。

ユーザーが$attrsが存在するかどうかを確認したいニッチなケースでは、 Object.keys($attrs).lengthを使用できるので、そのケースは引き続きカバーされます。

しかし、これがバグであると私に本当に納得させる部分は、OPが指摘しているように、小道具がコンポーネントに渡されるときに$attrs _ is_が空のオブジェクト設定されることです。 したがって、現在、 $attrsが存在するかどうかを実際に確認するには、次の両方の戦略が必要です。

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

@chrisvfritzは私を納得させました-それはバグです。

@LinusBorg現在、このバグに取り組んでいる人はいないようです。 このためのPRをいただけますか?

承知しました!

このページは役に立ちましたか?
0 / 5 - 0 評価