Vue: $ attrs ist undefiniert, wenn die Komponente keine Requisiten hat

Erstellt am 1. Aug. 2017  ·  8Kommentare  ·  Quelle: vuejs/vue

Ausführung

2.4.2

Reproduktionslink

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

Schritte zum Reproduzieren

Greifen Sie im Komponentenkontext auf $ attrs als Objekt zu, wenn keine Requisiten bereitgestellt wurden.

Was wird erwartet?

$ 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.

Was passiert eigentlich?

$ attrs ist undefiniert

bug

Hilfreichster Kommentar

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

Alle 8 Kommentare

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!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen