想用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函数没有再次调用
2 回答
慕码人8056858
TA贡献1803条经验 获得超6个赞
生命周期:
除非 你重新创建组件, 才会调用 componentsDidMount,
如果 你通过改变 props.
你需要 在 componentWillReceiveProps 里加入响应的函数。
子衿沉夜
TA贡献1828条经验 获得超3个赞
componentsDidMount只会在组件加载完后执行一次,之后更新state、props都不会执行,除非重新加载组件。
componentWillReceiveProps在组件传进来的props被更改时,将被调用。
所以可以在componentWillReceiveProps函数里改变state来重新获取数据。
添加回答
举报
0/150
提交
取消
