2017-12-06 3 views
0
{ 
    this.state.isLoadingInputDropDown && 
    <option value="-1" disabled >Loading...</option > 
} 

{/* TODO : was not able to combine below statements */} 
{ 
    !this.state.isLoadingInputDropDown 
    && <option value="-1" >--Select a Accessorial Charge first --</option> 
} 
{            
    !this.state.isLoadingInputDropDown 
    && this.state.allInputs.length > 0 
    && this.state.allInputs.map(
    (input) => (<option value={input.id} key={input.id}>{input.name}</option>) 
) 
} 

versuchen, diese JSX One-Liner oder etwas Kompaktes zu machen. Ich habe versucht, jede mögliche (was ich denken kann) StrukturWie kann diese JSX kompakt machen?

+0

Warum möchten Sie das kompakter machen? – TryingToImprove

Antwort

0

Vielleicht deklarieren Sie den Inhalt vor der Rückkehr jsx.

const dropdown = this.state.isLoadingInputDropDown ? <option value="-1" disabled >Loading...</option > : <option value="-1" >--Select a Accessorial Charge first --</option>; 

const otherOptions = this.state.isLoadingInputDropDown || !(this.state.allInputs.length > 0) ? null : this.state.allInputs.map(
    (input) => (<option value={input.id} key={input.id}>{input.name}</option>) 
); 

return (
    <select> 
     { dropdown } 
     { otherOptions } 
    </select> 
); 
+2

Das ist keine gültige Return-Anweisung. – TryingToImprove

+0

Danke für die Erwähnung, war in Eile :-D – Tobias

+0

Hatte es zu sagen, aber es wird immer noch scheitern, wenn er nicht eine zusätzliche Komponente mit dem Namen Select haben .. :) – TryingToImprove

0

Sie könnten so etwas tun;

return (
    <select> 
     {this.state.isLoadingInputDropDown 
      ? <option value="-1" disabled >Loading...</option> 
      : [{ id: -1, name: '--Select a Accessorial Charge first --'}, ...this.state.allInputs].map(
       (input) => (<option value={input.id} key={input.id}>{input.name}</option>) 
      )} 
    </select> 
) 
0

Idealerweise teilen die ganze Funktion in zwei Teile:

let options; 

if (this.state.isLoadingInputDropDown) { 
    const defaultOption = <option value="-1" disabled >Loading...</option>; 
    options = [defaultOption]; 
} else { 
    const defaultOption = <option value="-1" >--Select a Accessorial Charge first --</option>; 
    const choices = this.state.allInputs.map(
     (input) => (<option value={input.id} key={input.id}>{input.name}</option>) 
    ) 
    options = [defaultOption, ...choices]; 
} 

return (
    <select> 
     {options} 
    </select> 
); 

Die this.state.allInputs.length > 0 Prüfung ist nicht erforderlich.

Versuchen Sie nicht, dies zu einem Einzeiler zu machen. Es ist nicht wichtig, wie lange Code ist. Das Wichtige ist, es lesbar zu machen. Sie sollten in Erwägung ziehen, diesen Code in mehrere Funktionen aufzuteilen.

+0

Im Allgemeinen hast du Recht. Wenn Sie dies tun, vermeiden Sie es, Variablen zu mutieren und Anweisungen anstelle von Ausdrücken zu verwenden, die keine Nebenwirkungen verursachen. – Tobias

+0

@Tobias Ich habe nicht verstanden, was du gesagt hast. – Sulthan

+0

Ich meinte nur: Vermeiden Sie "let" (lassen Sie Optionen = ...) Anweisungen und verwenden Sie "const". Dies führt automatisch zu einem Refactoring Ihres Codebeispiels, das die Mutation von "Optionen" durch eine Zuweisung von Optionen ersetzt, was der bessere Weg ist. – Tobias

Verwandte Themen