구성 요소가 2 개 있습니다.하위 Reactjs 구성 요소가 다시 렌더링되지 않음
- 유튜브 - Ajax 호출을 처음
후 10 때 검색 결과를 도시 ... 묵시적으로 - 검색 창 및 검색을위한 컨테이너
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>
);
}
...
}
* 여기 * 코드를 게시하십시오. 나는 이번에 당신을 위해 그것을했지만, 여기에 게시하십시오 * 여기 *. 나는 또한 두 개의 전체 파일을 훑어 보는 일은 정말로 시간이 많이 걸리고 많은 사람들이 도움을 꺼리는 것을 막을 수 있기 때문에 문제에 대한 관련 코드만을 제공 할 것을 제안합니다. – Li357
@AndrewL. 고마워하고 미안해. 여기에 한동안 게시하지 않았습니까 – 73cn0109y
왜 this.state.data || this.props.data'가 있습니까? 'render' 함수가 * state *의 데이터를 가리키고있어 * props *에서 데이터를 사용할 수없는 것처럼 들립니다. – Wex