【发布时间】:2016-10-12 01:45:58
【问题描述】:
我有 2 个组件。
- 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>
);
}
...
}
【问题讨论】:
-
请在这里发布代码。这次我已经为您完成了,但请将其发布在这里。我还建议只向我们提供与您的问题相关的代码,因为筛选两个完整的文件非常耗时,而且会阻止许多人提供帮助。
-
@AndrewL。谢谢和抱歉。好久没发帖了
-
你为什么有
this.state.data||this.props.data?听起来您的render函数被困在您的 state 中的数据上,这会阻止它使用您的 props 中的数据。
标签: reactjs