Rendern einer array.map() in React

Lesezeit: 4 Minuten

Ich habe ein Problem, bei dem ich versuche, ein Array von Daten zum Rendern von a zu verwenden <ul> Element. Im Code unter dem console.logfunktionieren einwandfrei, aber die Listenelemente werden nicht angezeigt.

var Main = React.createClass({
  getInitialState: function(){
    return {
      data: dataRecent
    }
  },

  render: function(){
    return (
      <div>
        <ul>
          {
           this.state.data.map(function(item, i){
             console.log('test');
             <li>Test</li>
           })
         }
        </ul>
      </div>
    )
  }
});

ReactDOM.render(<Main />, document.getElementById('app')); 

Was mache ich falsch? Bitte fühlen Sie sich frei, auf alles hinzuweisen, was nicht Best Practice ist.

Rendern einer arraymap in React
Dmitri Birin

Gosha Arinich hat Recht, du solltest deine zurückgeben <li> Element. In diesem Fall sollten Sie jedoch eine böse rote Warnung in der Browserkonsole erhalten

Jedes Kind in einem Array oder Iterator sollte eine eindeutige “Schlüssel”-Prop haben.

Sie müssen also “Schlüssel” zu Ihrer Liste hinzufügen:

this.state.data.map(function(item, i){
  console.log('test');
  return <li key={i}>Test</li>
})

oder lass die fallen console.log() und machen Sie einen schönen Einzeiler mit es6 Pfeilfunktionen:

this.state.data.map((item,i) => <li key={i}>Test</li>)

WICHTIGE AKTUALISIERUNG:

Die obige Antwort löst das aktuelle Problem, aber wie Sergey in den Kommentaren erwähnte: Die Verwendung des Schlüssels hängt vom Kartenindex ab SCHLECHT wenn Sie etwas filtern und sortieren möchten. Verwenden Sie in diesem Fall die item.id wenn id bereits vorhanden, oder generieren Sie einfach eindeutige IDs dafür.

  • Wenn ich diesen Satz von

  • zu
      hinzufüge. Ich bekomme immer noch die gleiche rote böse Warnung in der Konsole. Wie wird man das gleiche los?

      – Informant

      28. August 2017 um 10:53 Uhr

  • Hey! Brauchen Sie noch Hilfe? Ist es das Gleiche ‘Jedes Kind in einem Array oder Iterator sollte eine eindeutige “Schlüssel”-Prop haben’ böse Nachricht?

    – Dmitri Birin

    8. September 2017 um 21:17 Uhr


  • key muss einzigartig sein. Ihr Code wird nach dem Sortieren einen Fehler verursachen this.state.dataals key hängt immer von einem Index im Array ab

    – Sergej Podgornyj

    28. Januar 2019 um 10:34 Uhr

  • @SergeyPodgornyy stimme voll und ganz zu, schrieb dies vor langer Zeit. Antwort aktualisiert. Danke für die Nachverfolgung!

    – Dmitri Birin

    29. Januar 2019 um 16:57 Uhr

  • Sie kehren nicht zurück. Ändern

    this.state.data.map(function(item, i){
      console.log('test');
      return <li>Test</li>;
    })
    

    1647158707 172 Rendern einer arraymap in React
    Najma Muhammed

    let durationBody = duration.map((item, i) => {
          return (
            <option key={i} value={item}>
              {item}
            </option>
          );
        });
    

    • Willkommen bei Stapelüberlauf! Vielen Dank für dieses Code-Snippet, das möglicherweise eine begrenzte, sofortige Hilfe bietet. EIN Eine richtige Erklärung würde seinen langfristigen Wert erheblich verbessern durch Zeigen warum Dies ist eine gute Lösung für das Problem und würde es für zukünftige Leser mit anderen, ähnlichen Fragen nützlicher machen. Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, einschließlich der von Ihnen getroffenen Annahmen.

      – Suraj Rao

      28. Januar 2019 um 10:31 Uhr

    Sie kehren implizit zurück undefined. Sie müssen das Element zurückgeben.

    this.state.data.map(function(item, i){
      console.log('test');
      return <li>Test</li>
    })
    

    1641927541 686 Array Wert Anzahl Javascript
    Jee Mok

    Fügen Sie Dmitrys Antwort hinzu, wenn Sie eindeutige Schlüssel-IDs nicht manuell handhaben möchten, können Sie verwenden React.Children.toArray wie in der vorgeschlagen Dokumentation reagieren

    Kinder.aufArray.reagieren

    Gibt die untergeordnete undurchsichtige Datenstruktur als flaches Array mit Schlüsseln zurück, die jedem untergeordneten Element zugewiesen sind. Nützlich, wenn Sie Sammlungen von untergeordneten Elementen in Ihren Rendermethoden manipulieren möchten, insbesondere wenn Sie this.props.children neu anordnen oder in Scheiben schneiden möchten, bevor Sie es weitergeben.

    Notiz:

    React.Children.toArray() ändert Schlüssel, um die Semantik verschachtelter Arrays beizubehalten, wenn Listen von untergeordneten Elementen reduziert werden. Das heißt, toArray stellt jedem Schlüssel im zurückgegebenen Array ein Präfix voran, sodass der Schlüssel jedes Elements auf das Eingabearray beschränkt ist, das es enthält.

     <div>
        <ul>
          {
            React.Children.toArray(
              this.state.data.map((item, i) => <li>Test</li>)
            )
          }
        </ul>
      </div>
    

    Rendern einer arraymap in React
    azeem

    Verwendung einer zustandslosen Funktionskomponente Wir werden this.state nicht verwenden. So was

     {data1.map((item,key)=>
                   { return
                    <tr key={key}>
                    <td>{item.heading}</td>
                    <td>{item.date}</td>
                    <td>{item.status}</td>
                  </tr>
                    
                    })}
    

    1647158709 91 Rendern einer arraymap in React
    Radu Galan

    Ich bin auf ein Problem bei der Implementierung dieser Lösung gestoßen.

    Wenn Sie eine benutzerdefinierte Komponente haben, die Sie durchlaufen möchten, und Sie den Zustand freigeben möchten, ist sie nicht verfügbar, da der .map()-Bereich den allgemeinen state()-Bereich nicht erkennt. Ich bin zu dieser Lösung gekommen:

    `

    class RootComponent extends Component() {
        constructor(props) {
            ....
            this.customFunction.bind(this);
            this.state = {thisWorks: false}
            this.that = this;
        }
        componentDidMount() {
            ....
        }
        render() {
           let array = this.thatstate.map(() => { 
               <CustomComponent that={this.that} customFunction={this.customFunction}/>
           });
    
        }
        customFunction() {
            this.that.setState({thisWorks: true})
        }
    }
    
    
    
    class CustomComponent extend Component {
    
        render() {
            return <Button onClick={() => {this.props.customFunction()}}
        }
    }
    

    In Konstruktorbindung ohne this.that Jede Verwendung einer Funktion/Methode innerhalb der Root-Komponente sollte mit verwendet werden this.that

    996540cookie-checkRendern einer array.map() in React

    This website is using cookies to improve the user-friendliness. You agree by using the website further.

    Privacy policy