2017-02-25 3 views
0

Im über Stützen an eine Komponente in einer Anordnung zu senden, aber ich kann Karte auf dem Array. Er sagt, dassin der Lage, nicht über Stützen geschickt in ein Array verwenden

.map keine Funktion ist

Mein Code:

const AuthorList = (authors) => { 
return(
    <table className="table"> 
     <thead> 
      <tr>Firstname</tr> 
      <tr>Lastname</tr> 
     </thead> 
     <tbody> 
      {authors.map(author => 
       <AuthorListRow key={author.id} author={author} /> 
      )} 
     </tbody> 
    </table> 
); 
}; 

Dies ist, was das Chrome Entwickler-Tool Reaktion wie folgt aussieht:

enter image description here

Antwort

2

Problem, wenn Sie alle Daten von Eltern auf das Kind übergeben, um es durch Requisiten vergangen, und Sie brauchen, um die Requisiten in Kindkomponente zu empfangen und die spezifischen Werte zuzugreifen, schreiben Sie es wie folgt aus:

const AuthorList = (props) => { 
return(
    <table className="table"> 
     <thead> 
      <tr>Firstname</tr> 
      <tr>Lastname</tr> 
     </thead> 
     <tbody> 
      {props.authors.map(author => 
       <AuthorListRow key={author.id} author={author} /> 
      )} 
     </tbody> 
    </table> 
); 
}; 

oder

const AuthorList = ({authors}) => { 
    return(
     <table className="table"> 
      <thead> 
       <tr>Firstname</tr> 
       <tr>Lastname</tr> 
      </thead> 
      <tbody> 
       {authors.map(author => 
        <AuthorListRow key={author.id} author={author} /> 
       )} 
      </tbody> 
     </table> 
    ); 
}; 

Grund, warum 2. man arbeitet: weil Requisiten ein Objekt ist, wenn Sie schreiben {authors} bedeutet, dass Sie nur authors Wert von Objekt props erhalten. In diesem Fall müssen Sie nicht props.authors schreiben.

prüfen dieses Beispiel:

obj = {a:1,b:2,c:3} 
 
let {a} = obj; 
 
console.log(a);

+0

Vielen Dank! Ich weiß, warum es nicht funktioniert hat, es war das fehlende {}, das nur Autoren von den Requisiten holt. Vielen Dank! –

1

Props werden als Objekt übergeben, also jetzt authors fungiert als Alias ​​für props. Der Zugriff auf die Eigenschaft authors unter props sollte so lange funktionieren, wie diese Prop mit einem Array deklariert wird.

const AuthorList = (props) => { 
    return(
    // .. 
      {props.authors.map(author => 
       <AuthorListRow key={author.id} author={author} /> 
      )} 
    // .. 
); 
}; 
+0

Das Merkwürdige ist, ich das gleiche Muster in einem anderen Teil meiner app haben, und dort seine Arbeit, was ist der Unterschied, dass diese Arbeit Code macht ? const CourseList = ({Kurse}) => {.......... {courses.map (Kurs => )} –

+1

Diese Curlies um 'Kurse' sind ein [Objekt Destruktur] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment). Das zieht "Kurse" aus "Requisiten" und ist äquivalent zur Verwendung von "Requisiten" ohne die Destruktur. Das fehlt im obigen 'AuthorList'-Code. – max