我按照关于如何构建React
应用程序的教程,而且我遇到了一些奇怪的问题。React好像不会将道具传递给其他组件
当我尝试将某些信息传递给另一个组件时,其他组件获取props
但它是空的。
在我的情况下,index.js
是这样的:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import YTSearch from 'youtube-api-search';
import SearchBar from './components/search_bar';
import VideoList from './components/video_list';
const API_KEY = 'AIzaSyDdvc_zComCpdqqfmwgOsZvLOwwPEabcde';
class App extends Component {
constructor (props) {
super (props);
this.state = {
videos : []
};
}
componentDidMount() {
YTSearch (
{
key : API_KEY,
term : 'surfboards'
},
videos => {
this.setState ({ videos });
}
);
}
render() {
return (
<div>
<SearchBar />
<VideoList videos={this.state.videos} />
</div>
);
}
};
ReactDOM.render (
<App />,
document.querySelector ('.container')
);
和我的./components/video_list.js
代码是这样的:
import React, { Component } from 'react';
import VideoListItem from './video_list_item';
class VideoList extends Component {
constructor(props) {
super(props);
this.state = {
videoItems : []
};
}
componentDidMount() {
this.setState(
{
videoItems: this.props.videos.map(
video => {
console.log(video);
return <VideoListItem video={video} />;
}
)
}
)
}
render() {
return (
<ul className="col-md-4 list-group">{ this.state.videoItems }</ul>
);
}
}
export default VideoList;
的代码似乎是非常strateforward,但在现实中,它有问题。
如果我尝试在index.js
我得到以下输出return
语句之前这一说法console.log(this.state.videos);
:
// Initially I get this because the API is not yet completed:
Array[0]
length: 0
__proto__: Array[0]
// And then, once the API Request it is completed I get this:
Array[5]
0: Object
etag : ""5C5HHOaBSHC5ZXfkrT4ZlRCi01A/2H00YaVLWV4Xof09xk9Q8k6vlxw""
id: Object
kind: "youtube#searchResult"
snippet: Object
__proto__: Object
1: Object
2: Object
3: Object
4: Object
length: 5
__proto__: Array[0]
与此同时,如果我尝试console.log(props)
的VideoList
组件我得到的constructor
方法内以下输出:
Object {videos: Array[0]}
videos: Array[0]
length: 0
__proto__: Array[0]
__proto__: Object
你知道什么是错的吗?你看到我看不到的东西吗?
自从您在构造函数中记录道具后,看起来对我很正确。 React组件有一个生命周期[https://facebook.github.io/react/docs/react-component.html](https://facebook.github.io/react/docs/react-component.html)。如果您期望看到道具传递下来,那么在更新生命周期中,比如'componentWillReceiveProps()' – phoa
@phoa谢谢您的回答。我要检查'componentWillReceiveProps',我会更新你:) –
@phoa谢谢:)对我有用:) –