调用

时间:2019-07-16 14:12:05

标签: javascript reactjs

问题是,我使用setState更新state.n和state.data。我想使用处理程序调用setState onClick。调用setState之后,我执行一个回调console.log来监视更改后的状态属性,但仅更改state.data,而不更改state.n。

handler(e) {
    this.setState((state) => {
        let arr = state.data;
        arr.push(fakeTableData[state.n+1]);
        this.setState({n: state.n+1, data: arr});
    }, console.log.bind(null, this.state.n));
}

使用一个处理程序后,我希望看到state.n增加,但是我只更改了state.data,而没有更改state.n。而且我收到这样的警告:“警告:已从更新函数内部安排了更新(setState,replaceState或forceUpdate)。更新函数应该是纯函数,副作用为零。请考虑使用componentDidUpdate或回调。”我已经在主要的React网站上阅读了一个教程,但是没有足够的信息。

2 个答案:

答案 0 :(得分:2)

您不应在设置状态的函数内部使用setState。这就是为什么您会出错。相反,您应该返回状态。试试这个:

handler = (e) => {
    this.setState((state) => {
        let arr = state.data;
        arr.push(fakeTableData[state.n+1]);
        return {n: state.n+1, data: arr};
    }, () => { console.log(this.state.n) });
}

答案 1 :(得分:2)

让我们尝试let arr = [...state.data]