javascript - 无法在现有状态转换期间更新(例如在 `render` 内)

标签 javascript reactjs material-ui

我知道这个问题已经被问过多次了, 但我仍然不知道如何修复我的代码。看来我不应该那样调用 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>
        )
    }
}

最佳答案

首先,如果没有index参数,使用bind的方式就可以了,如下:

this.handleStep = this.handleStep.bind(this);
onClick= {this.handleStep}

第二,如果onClick方法中有参数,则需要匿名函数来传递数据。匿名函数是()=>。

所以,使用箭头函数,你不需要在构造函数内部绑定(bind)。并且有很多选择:

//1
onClick={() => this.handleClick(index)}
//2
onClick={this.handleClick.bind(this, index)}

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

相关文章:

javascript - 每个刻度或每个 body 部位的命令排队

javascript - React JS 在 FileReader 内发生事件后不会改变状态

javascript - React material-ui 文本字段屏幕抖动

material-ui - 在 material-ui-pickers 2.2.4 中将日期图标对齐方式从右(默认)更改为左

javascript - Javascript 中的相等性测试

javascript - Yammer CORS 错误仅针对某些 API 调用出现

javascript - 如何检查一个数字是否是javascript中的BigInt

reactjs - 从传递给 React 按钮组件的事件处理程序中获取 id?

javascript - 切换 ui 选项卡时警告用户

javascript - Material-ui 对话框 : manipulating the Escape button and mouse clicking outside of the dialog