微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ReactJS-如何在componentDidUpdate中设置状态?

如何解决ReactJS-如何在componentDidUpdate中设置状态?

我想做的是设置一个计时器,该计时器每3秒向页面添加一个新组件。一切正常,直到第三秒,应用程序崩溃:

错误:超出最大更新深度。当组件重复调用componentwillUpdate或componentDidUpdate内部的setState时,可能会发生这种情况。 React限制了嵌套更新的数量以防止无限循环。

无论如何我是否可以解决此问题,或者有人对此有更好的解决方案?这是代码

class Test extends Component {
    constructor(props) {
        super(props);
        this.state = {
            time: 0,colors: []
        }
        this.create = this.create.bind(this);
    }

componentDidMount() {
    this.timer = setInterval(() => {
        this.setState({time: this.state.time + 1});
    },1000);
}

componentDidUpdate(prevProps,prevstate) {
    if (this.state.time % 3 === 0) {
        if (prevstate.colors !== this.state.colors) {
            this.create()
        }
        
    }
}

create() {
    let colors=['blue','green','red'];
    let randomNum = Math.floor(Math.random() * 3);
    let newColors = this.state.colors;
    newColors.push({color: colors[randomNum],num: randomNum});
    this.setState({colors: newColors});
}

render() {
    return (
        <div>
            <h1>{this.state.time}</h1>
            {this.state.colors.map(item => (
                <Random color={item.color} num={item.num} />
            ))}
            <button onClick={this.create}></button>
           
        </div>
    ) 
}
}

export default Test;

解决方法

可能在componentDidUpdate中,您应该对这些颜色使用贴图功能

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。