【发布时间】:2018-06-23 16:08:52
【问题描述】:
我可以成功地从 api 获取 json 对象。但是,更新状态似乎存在问题。
打印对象后,我得到了预期和期望的结果console.log(videos2.list[0]); 给出了 json 对象的列表属性中的第一项,您可以在此链接下查看 api 的外观:
https://api.dailymotion.com/videos?fields=description,id,thumbnail_url,title,&limit=5&search=cars
但是,当使用 setState 属性 selectedVideo 更新状态时:videos.list[0] 是未定义的。
组件代码:
class App extends Component {
constructor(props) {
super(props)
this.state = {
videos2:[],
selectedVideo:null
}
this.DMSearch()
}
DMSearch(){
fetch(`https://api.dailymotion.com/videos?fields=description,id,thumbnail_url,title,&limit=5&search=cars`)
.then(result => result.json())
.then(videos2 => {
console.log(videos2.list[0]);
this.setState({
videos2: videos2.list,
selectedVideo: videos2.list[0]
});
console.log(selectedVideo);
});
}
render () {
const DMSearch = this.DMSearch()
return (
<div>
<SearchBar onSearchTermChange= {DMSearch}/>
<VideoDetail video={this.state.selectedVideo}/>
<VideoList
onVideoSelect={selectedVideo=>this.setState({selectedVideo})}
videos2={this.state.videos2}/>
</div>
)
}
}
确切的错误是Uncaught (in promise) ReferenceError: selectedVideo is not defined
videos2:list[0] 产生正确的结果,但是当分配给selectedVideo 时,它是undefined
根据要求,我还包括 vide_list 的代码,它使用对象形式的父组件,这可能会在此处产生错误:
const VideoList = (props) => {
const videoItems = props.videos.map((video)=>{
return (
<VideoListItem
onVideoSelect={props.onVideoSelect}
key={video.etag}
video={video} />
)
})
return (
<ul className="col-md-4 list-group">
{videoItems}
</ul>
)
}
具体来说就是这一行
const videoItems = props.videos.map((video)=> {
在读取道具时导致错误。我相信这与selectedVideo 为空有关...
【问题讨论】:
-
我建议您从阅读ericlippert.com/2014/03/05/how-to-debug-small-programs 开始,了解有关如何调试代码的一些技巧。
-
如果您仍然需要帮助,请向我们展示
VideoList的代码以及它如何调用this.props.onVideoSelect()。此外,您应该清楚地指出哪一行代码导致了错误。 -
投反对票,因为这与您之前的问题完全相同。
-
不是,我已经自己解决了这个问题并用我的答案更新了问题,这里有不同的问题
标签: reactjs ecmascript-6