我知道这个问题已经被问过多次了
但我仍然不知道如何解决我的代码。似乎我不应该这样调用setState。但是我从material-ui网站上获取了示例代码,这应该很简单吗?

class Dashboard extends React.Component {

    constructor(props){
        super(props);
        this.state = {
            activeStep: 0,
        }
        this.handleStep = this.handleStep.bind(this);
    }

    handleStep(step) {
        this.setState({activeStep: step});
    };

    render(){
        const { classes, match } = this.props;
        const sprints = ['sprint 1', 'sprint 2', 'sprint 3'];
        const { activeStep } = this.state;

        return (
            <div className= {classes.root}>
                <div className = {classes.container} >
                    <Stepper nonLinear activeStep={activeStep} alternativeLabel>
                        {sprints.map((label,index)=>
                            {
                                return (
                                    <Step key={label}>
                                        <StepButton
                                            onClick= {this.handleStep(index)}
                                        >
                                            {label}
                                        </StepButton>
                                    </Step>
                                )
                            })
                        }
                    </Stepper>
                </div>
            </div>
        )
    }
}

最佳答案

您的onClickStepButton应该是onClick={() => this.handleStep(index)}。注意箭头功能。这传递了一个回调函数,该函数将在触发onClick时运行,而您的代码在this.handleStep期间调用render。否则,您处理状态更新的方式就很好。

关于javascript - 在现有状态转换期间(例如在`render`中)无法更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53367165/

10-12 12:39