Ich habe 2 Komponenten.Child Reactjs Komponente nicht neu rendern
- Youtube - übernimmt die searchbar und einen Behälter für die Suchergebnisse
- YoutubeSearchResults - wie angedeutet ... zeigt die Suchergebnisse nach einem Ajax-Aufruf
Zum ersten Mal beendet ist, wenn Sie suchen nach etwas, das Ergebnis zeigt sich gut. Aber wenn Sie erneut suchen (Abfrage geändert oder nicht), wird YoutubeSearchResults nicht aktualisiert (/ re-render), obwohl die Render-Funktion aufgerufen und ausgeführt wird (ich weiß, weil verschiedene show.output von console.log). Ich kann nicht herausfinden, warum das passiert und keine Suche scheint ähnlich zu sein, was ich erlebe.
Youtube
Komponente:
...
render() {
let body = null;
if(this.state.data !== null) {
body = <YoutubeSearchResults data={this.state.data} />
}
return (
<div>
<div className="youtube-header">
<form name="youtube-search" action="" onSubmit={this.search.bind(this)} method="post" ref="youtubeSearch">
<input type="text" name="q" placeholder="Search" autoComplete="off" />
</form>
</div>
<div className="youtube-body" ref="youtubeBody">{body}</div>
</div>
);
}
search(e) {
let self = this;
... ajax request ... }, function(data) {
self.setState({ data: data });
});
}
YoutubeSearchResults
Komponente:
export default class YoutubeSearchResults extends React.Component {
constructor(props) {
super(props);
this.state = {
data: null,
currentPage: 0,
currentVideoId: null
};
}
componentWillReceiveProps() {
this.setState({ currentVideoId: null });
}
render() {
let self = this;
...
return (
<div>
{(this.state.data||this.props.data).map(function(obj, key) {
return (
<div key={key}>
<img src={obj.thumbnails.medium} className="youtube-result-thumbnail" />
<h3 className="youtube-result-title">{obj.title}</h3>
<div className="youtube-result-duration">
<span>{obj.contentDetails.duration.toSeconds().parseDuration()}</span>
</div>
</div>
);
})}
...
</div>
);
}
...
}
Bitte Postleitzahl * hier * eingeben. Ich habe das diesmal für dich gemacht, aber bitte posten Sie es * hier *. Ich würde auch vorschlagen, uns nur relevanten Code für Ihr Problem zu geben, da das Durchsieben von zwei ganzen Dateien wirklich zeitaufwändig ist und viele davon abhalten wird, zu helfen. – Li357
@AndrewL. Danke und Entschuldigung. Habe hier schon lange nicht mehr gepostet – 73cn0109y
Warum hast du 'this.state.data || this.props.data'? Es hört sich so an, als ob deine 'render'-Funktion auf die Daten in deinem * state * verweist, die verhindern, dass sie die Daten in deinen * Requisiten * benutzt. – Wex