Hallo, ich versuche map
meine Daten, die ich von meinem Firebase, in eine Reihe von Karten fechtete. Aber da ich den Zustand in meiner constructor
definiert habe, wird eine Karte mit keinen Werten am Anfang zurückgegeben. Was kann ich tun, um die Rückgabe dieser ersten leeren Kartenkomponente zu vermeiden? Danke im Voraus.
(die Karte Komponente ist eine Komponente mit einem Thumbnail, die ich importiert)Warum wird mein Zustand in ReactJS zu oft gemappt?
class List extends Component {
constructor(props){
super(props)
this.db = firebase.database().ref().child('app').child('cards');
this.state = {
cards: [
{
id: "",
cardDesc: "",
cardPrice: "",
cardHeading: "",
}
]
}
}
componentWillMount(){
const previousCards = this.state.cards
this.db.on('child_added', snap => {
previousCards.push ({
id: snap.key,
cardDesc: snap.val().cardDesc,
cardPrice: snap.val().cardPrice,
cardHeading: snap.val().cardHeading,
})
this.setState ({
cards: previousCards
})
})
}
render(){
return(
<div className='list'>
<Row>
{ this.state.cards.map((card) => {
return(<Card cardHeading={card.cardHeading} cardDesc={card.cardDesc}
cardPrice={card.cardPrice} key={card.id} />)
})
}
</Row>
</div>
)
}
}
export default List
Sie meinen, dass ich meinen Zustand in den Konstruktor legte und die Rückgabefunktion so betrieb? 'return (
Ja, wenn Sie Sie nicht die leere Karte sehen keinen ursprünglichen Zustand haben, und wenn Sie auf das Vorhandensein überprüfen von 'state.cards' in Ihrer Methode machen, kein' 'Komponenten werden angezeigt, bis sich der Status ändert Ihr Status wird sich ändern, wenn der' db'-Aufruf abgeschlossen ist, was zu einem 're-render' führt, den Null-Test auf' card' übergibt und Ihr zugeordnetes 'cards' Array rendert . –
dougajmcdonald