想用react做一个搜索框,组建件传值已经能从input传到list组件修改state.keyword值,但getData()函数中使用fetchJsonp获取json数据只是初始的state.keyword的值,所以获取数据不会改变,请问有什么方法可以解决呢?
state.keyword初始值为 jianai 通过getData方法获取json
componentDidMount(){
var that = this;
const keyword = this.props.keyword;
var url = "https://api.douban.com/v2/book/search?q="+keyword;
var getData = function(){
return fetchJsonp(url)
.then(function(response) {
return response.json()
}).then(function(json) {
console.log('parsed json', json.books[0]);
return json;
}).catch(function(ex) {
console.log('parsing failed', ex)
})
}
getData().then(function(data){
that.setState({
author:data.books[0].author,
imgsrc:data.books[0].image
});
})
}
<div className="list-book">
<div className="list-box">
<li>{this.state.author}</li>
</div>
<div className="list-box">
<img src={this.state.imgsrc} />
</div>
<div className="list-box">
<li>{keyword}</li>
</div>
</div>
运行结果如图
通过搜索框修改后,keyword值变了,但getData函数没有再次调用
生命周期:
除非 你重新创建组件, 才会调用 componentsDidMount,
如果 你通过改变 props.
你需要 在 componentWillReceiveProps 里加入响应的函数。