2.4.2
https://jsfiddle.net/50wL7mdz/50757/
Greifen Sie im Komponentenkontext auf $ attrs als Objekt zu, wenn keine Requisiten bereitgestellt wurden.
$ attrs ist ein Objekt, das nicht erkannte Requisiten enthält. Daher würde ich ein leeres Objekt erwarten, wenn auf dem Komponenten-Tag keine Requisiten angegeben sind.
$ attrs ist undefiniert
Welches Problem haben Sie aus Neugier, wenn Sie ein undefiniertes $attrs
? Greifen Sie auf $attrs.something
? (Wenn ja warum?)
edit: Ich frage auch, weil es nützlich sein kann, wenn $attrs
gleich undefiniert ist, wenn es keine Attribute gibt
@greegus , falls Sie so etwas wie if ($attrs.myProp)
, können Sie if ($attrs?.myProp)
indem Sie babel-plugin-transform-optional-chaining verwenden .
Ich würde dies als erwartetes Verhalten beurteilen, aber es ist umstritten.
ping @greegus
Ich bin gerade darauf gestoßen und es war definitiv unerwartet für mich, dass $attrs
jemals undefined
.
Wenn Sie beispielsweise eine Aufgaben-App schreiben, die ohne Aufgaben beginnt, ist es sehr seltsam, die Liste als undefined
anstelle von []
. Sie müssten überall in Ihrer App if
-Anweisungen (oder optionale Verkettungen) hinzufügen. Dieser Fall ist ähnlich.
In Nischenfällen, in denen ein Benutzer überprüfen möchte, ob $attrs
vorhanden ist, kann weiterhin Object.keys($attrs).length
, sodass dieser Fall weiterhin abgedeckt ist.
Der Teil, der mich wirklich überzeugt, dass dies ein Fehler ist, ist, dass $attrs
_ auf ein leeres Objekt gesetzt wird, wenn eine Requisite an eine Komponente übergeben wird - wie das OP hervorhebt. Um wirklich zu prüfen, ob $attrs
vorhanden ist, sind derzeit beide Strategien erforderlich:
$attrs && Object.keys($attrs).length
@chrisvfritz hat mich überzeugt - es ist ein Fehler.
@LinusBorg Es sieht so aus, als würde derzeit niemand an diesem Fehler arbeiten. Darf ich einen PR dafür haben?
Sicher!
Hilfreichster Kommentar
Ich bin gerade darauf gestoßen und es war definitiv unerwartet für mich, dass
$attrs
jemalsundefined
.Wenn Sie beispielsweise eine Aufgaben-App schreiben, die ohne Aufgaben beginnt, ist es sehr seltsam, die Liste als
undefined
anstelle von[]
. Sie müssten überall in Ihrer Appif
-Anweisungen (oder optionale Verkettungen) hinzufügen. Dieser Fall ist ähnlich.In Nischenfällen, in denen ein Benutzer überprüfen möchte, ob
$attrs
vorhanden ist, kann weiterhinObject.keys($attrs).length
, sodass dieser Fall weiterhin abgedeckt ist.Der Teil, der mich wirklich überzeugt, dass dies ein Fehler ist, ist, dass
$attrs
_ auf ein leeres Objekt gesetzt wird, wenn eine Requisite an eine Komponente übergeben wird - wie das OP hervorhebt. Um wirklich zu prüfen, ob$attrs
vorhanden ist, sind derzeit beide Strategien erforderlich: