2017-12-10 2 views
1

Gibt es eine Möglichkeit, so etwas zu tun?Kann ich die Destrukturierung in einer if-Anweisung verwenden?

if({color, size, shape} = this.props){ 
    console.log('Received all props!'); 
} else { 
    console.log('There are some missing props'); 
} 

Ich möchte wissen, ob ich alle benötigten Daten empfangen durch Requisiten meine Bauteile, und wenn nicht, dann einen Fehler aus.

Es ist für die Erstellung von wiederverwendbaren Komponenten.

+0

Es ist syntaktisch gültig, aber es nicht tun, was Sie wollen. – Bergi

+0

Sie können nicht für die Wahrheitlichkeit von mehreren Eigenschaften wie das überprüfen –

+1

Warum extrahieren Sie nicht einfach die Requisiten vor dem if und überprüfen Sie sie wie ein normales vars? Ich sehe nicht, was du mit dem vorgeschlagenen Weg verdienen wirst ... – Coluccini

Antwort

4

Sie Standardwerte verwenden:

function missing(prop) { 
    throw new TypeError(`there is a missing ${prop} property`); 
} 

… 
try { 
    const { 
    color = missing("color"), 
    size = missing("size"), 
    shape = missing("shape"), 
    } = this.props; 
    // use color, size, shape here 
    console.log("Received all props!"); 
} catch(err) { 
    console.log(err.message); 
} 

Um eine if Anweisung, keine kann man nicht Destrukturierung verwenden, um einen boolean zu erzeugen, ob alle Objekte da sind. Eher etwas wie

üblich tun
if ("color" in this.props && "size" in this.props && "shape" in this.props) { 
    console.log('Received all props!'); 
} else { 
    console.log('There are some missing props'); 
} 

(oder besser noch, überprüfen Sie die Art des Wertes, den Sie erwartet)

Verwandte Themen