Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 父状态不更新子组件_Javascript_Reactjs - Fatal编程技术网

Javascript 父状态不更新子组件

Javascript 父状态不更新子组件,javascript,reactjs,Javascript,Reactjs,情况: 当我通过单击开始启动模拟时,我的清除按钮应该停止它。但当我点击Clear时,什么也没发生。为什么以及如何修复它 代码: Game.jsx var Game = createReactClass ({ getInitialState() { return { start: false } }, handleStartClick() { this.setState({

情况:

当我通过单击开始启动模拟时,我的清除按钮应该停止它。但当我点击Clear时,什么也没发生。为什么以及如何修复它


代码:

Game.jsx

var Game = createReactClass ({

    getInitialState() {
        return {
            start: false
        }
    },

    handleStartClick() {
        this.setState({
            start: true
        })
    },

    handleClearClick() {
        this.setState({
            start: false
        })
    },

    render() {
        return (
            <div>
                <h1>React.js Game of Life</h1>
                <div className="buttons"> 
                    <button className="btn btn-danger" onClick={this.handleClearClick}>Clear</button>
                    <button className="btn btn-success" onClick={this.handleStartClick}>Start</button>
                </div>
                <Board start={this.state.start}/>
            </div>
        );
    }

})

你应该将你的进化间隔保存为state,这样当新道具进来取消它时,你可以访问它

if(nextrops.start&&this.state.start==false){
让evolution=setInterval(()=>{
这就是生活(下一步);
log(“垂死:+this.state.垂死”);
这是我的国家({
所选:!this.state.deing
});
}, 500);
这是我的国家({
开始:是的,
进化
})
}
否则{
clearInterval(这个状态,进化);
这是我的国家({
开始:错误
})

}
我的清除按钮应该停止它
它停止了吗?您在控制台中是否有任何错误?@Panther没有错误,不会停止它。您在
组件中重新定义
进化
将接收道具
。保持原样。进化。完美,成功了!看来你很了解reactsj,你能不能也看看这个问题太好了!当然,我会看一看。我在一分钟前用我在代码方面的最新进展更新了这个问题,这样你就不会看旧代码了。
var Board = createReactClass ({

    getInitialState() {
        var cellArray = [];
        for (var y = 0; y < 40; y++) {
            var cells = [];
            for (var x = 0; x < 40; x++) {
                cells.push(<Cell key={x + y*40} id = {x + y*40} row = {x} column={y} />);
            }
            cellArray.push(cells);
        }
        return {
            array: cellArray
        }
    },

    render() {

        var rows = [];
        for (var y = 0; y < 40; y++) {
            var cells = [];
            for (var x = 0; x < 40; x++) {
                cells.push(<Cell start= {this.props.start} array={this.state.array} key={x + y*40} id = {x + y*40} row = {x} column={y} />);
            }
            rows.push(<tr key={y}>{cells}</tr>);
        }
        return <table><tbody>{rows}</tbody></table>;

    }

})
componentWillReceiveProps(nextProps) {

        nextProps.array[nextProps.id] = this;

        var evolution;

        if(nextProps.start && this.state.started == false) {
            evolution = setInterval(() => { 
                this.life(nextProps);
                console.log("DYING:"+this.state.dying);
                this.setState({
                    selected: !this.state.dying
                });
            }, 500);
            this.setState({
                started: true
            })
        } 
        else {
            clearInterval(evolution);
            this.setState({
                started: false
            })
        }
    },