2016-06-03 8 views
0

Ich verstehe nicht, was ich hier falsch mache. Ich verwende Immutable.js & React in meiner App. Ich rufe Immutable.js filter Funktion, um die Sammlung basierend auf der if Bedingung & Rückkehr Array von React-Komponenten zu verfeinern.Verwenden der Filterfunktion, um React Component zurückzugeben - Code Review

Es gibt tatsächlich 'svgTemplateState' anstelle der React-Komponentensammlung zurück.

 let getUpdatedTem = (renderType, svgTemplateState) => { 
      switch(renderType){ 
      case("Template Selection"): 
       return(svgTemplateState.filter((templateType) => { 
        if(templateType.get("templateNo") > -1){ 
         let temType = templateType.get("type"); 
         return(
          <TemplatePath 
          temData = { templateType } 
          key = { temType } /> 
         ); 
        } 
       })); 
      case("Preview"): 
... 
+0

Es ist normal, dass Sie Ihre Liste filtern, um eine andere Liste aller Elemente zu haben, die dem Prädikat –

+0

entsprechen. Die zurückgegebene Liste ist dieselbe wie 'svgTemplateState' Array, wenn ich erwarte, dass sie 'TemplatePath' Array zurückgibt. – Kayote

Antwort

3

Immutable Filter sollte eine boolean zurückgeben, was darauf hindeutet, ob Sie die Vorlage wollen ein Teil der Sammlung sein, dass Sie zurückkehren. In Ihrem Fall geben Sie eine React-Komponente zurück.

Sie iterieren svgTemplateState, die eine Karte zu sein scheint (es ist mir nicht ganz klar, was es ist). Was Sie wiederholen sollten, ist eine Sammlung von Vorlagen, und überprüfen Sie die Vorlagennummer für jede Vorlage in der Sammlung. Sie hätten etwas (vereinfacht) wie:

+1

Sie sind absolut richtig. Ich wusste nicht einmal, dass seine boolesche Rückkehr. Danke, das löst das Problem sofort. – Kayote

0

Was möchten Sie den ersten Artikel, der die Bedingung erfüllen? mögen . findEntry()?

+0

Dann, wenn gefunden, die Komponente zurückgeben? –

+0

Danke Michael für die Hilfe und die Mühe, aber ich möchte durch die Sammlung filtern. Dankbar löste Kim das Problem. Danke nochmal für die Hilfe. – Kayote

0
  return(svgTemplateState.filter((templateType) => { 
       if(templateType.get("templateNo") > -1){ 
        let temType = templateType.get("type"); 
        return(
         <TemplatePath 
         temData = { templateType } 
         key = { temType } /> 
        ); 
       } 
      })); 

svgTemplateState Angenommen ist ein Array, ersetzen "Filter" Verfahren in dem obigen Code mit "Karte". Wenn svgTemplateState ein Objekt mit Paaren ist, verwenden Sie a for ... in, um über svgTemplateState zu iterieren, überprüfen Sie die Bedingung und schieben Sie die Komponente auf ein temporäres Objekt, das Sie nach der Schleife zurückgeben können.