私は2つのコンポーネントを持っています。子Reactjsコンポーネントは再レンダリングされません
- YouTubeの - 検索バーを処理し、検索のためのコンテナが
- YoutubeSearchResults結果 - 暗示として... AJAX呼び出しをするとき、初めて
を終えた後に、検索結果を示しています結果がうまく表示されるものを検索します。しかし、再度検索すると(クエリが変更されたかどうか)、YoutubeSearchResultsは呼び出されて実行されているにもかかわらず、更新/再レンダリングしません(さまざまなconsole.logの出力が表示されるため)。なぜこのようなことが起こっているのかわかりませんし、検索は私が経験しているものに似ているようです。
Youtube
コンポーネント:
...
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
コンポーネント:
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>
);
}
...
}
※ここにコード*を記入してください。私はあなたのためにこの時間をしましたが、投稿してください*ここ*。私はまた、2つのファイル全体をふるい分けることは本当に時間がかかり、多くの人が助けてくれることを妨げるので、あなたの問題に関連するコードだけを私たちに与えることをお勧めします。 – Li357
@AndrewL。ありがとう、申し訳ありません。ここに投稿したことはありません – 73cn0109y
なぜあなたは 'this.state.data || this.props.data'を持っていますか? 'render'関数があなたの* state *内のデータを指し示していて、あなたの* props *内のデータの使用を妨げているようです。 – Wex