求助通过setState怎么重新加载数据?



  • 想要做一个切换新闻类别的功能,点击按钮之后,生成新的api地址,重新加载
    大致如下:

    _fetch() {
    var REQUEST_URL = this.state.api
    fetch(REQUEST_URL)
    .then((response) => response.json())
    .then((responseData) => {
    this.setState({
    dataSource: this.state.dataSource.cloneWithRows(responseData.value),
    })
    }).done();
    }

    _change(){
    this.setState({
    api:'',
    });
    this._fetch()
    }
    但是setState之后,state值并不是马上就变的,要点第二下才可以
    如果用:
    componentDidUpdate(){
    this._fetch()
    }
    就会因为fetch里面也有setState,会无限循环
    求助应该怎么做



  • _change(){
    setTimeout(() => {
    this.setState({
    api:'newapi',
    });
    this._fetch()
    }, 0);
    }

    找到一个可行的方法,这样解决是解决了,但总感觉哪里怪,如果有谁有更好的思路请指教。。



  • 显然fetch依赖的这个api根本无关界面渲染,所以你完全可以不用把它放到state中
    直接放到this里就可以了

    _fetch() {
    var REQUEST_URL = this.api
    fetch(REQUEST_URL)
    .then((response) => response.json())
    .then((responseData) => {
    this.setState({
    dataSource: this.state.dataSource.cloneWithRows(responseData.value),
    })
    }).done();
    }
    
    _change(newapi){
    this.api = newapi;
    this._fetch()
    }
    


  • @sunnylqm 搞定了,确实是这样,感谢