为了账号安全,请及时绑定邮箱和手机立即绑定

react,在componentDidMount里面获取数据调用setState为何没有触发重渲染?

react,在componentDidMount里面获取数据调用setState为何没有触发重渲染?

慕田峪4524236 2019-03-13 17:19:28
想用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 里加入响应的函数。

查看完整回答
反对 回复 2019-03-20
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

componentsDidMount只会在组件加载完后执行一次,之后更新state、props都不会执行,除非重新加载组件。
componentWillReceiveProps在组件传进来的props被更改时,将被调用。
所以可以在componentWillReceiveProps函数里改变state来重新获取数据。

查看完整回答
反对 回复 2019-03-20
  • 2 回答
  • 0 关注
  • 7208 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号