Подтвердить что ты не робот

Реагирует методы передачи как реквизит для ребенка

Есть ли способ передать методы текущего класса в дочерний класс в качестве реквизита

В качестве примера:

var SignupModal = React.createClass({
mixins: [CheckMixin],
getInitialState: function(){
  return {
      'wizardstate': 0
  }
},
setWizardState: function(state){
    var that = this;
    switch (state){
        case 0:
           that.setState({'wizardstate': 0});
           break;
        case 1:
            that.setState({'wizardstate': 1});
            break;
        case 2:
            that.setState({'wizardstate': 2});
            break;
        case 3:
            that.setState({'wizardstate': 3});
            break;
        case 4:
            that.setState({'wizardstate': 4});
            break;
    }
},
render: function(){
    var temp;
    switch (this.state.wizardstate){
        case 0:
           temp = (<SignupSetup setWizardState={this.setWizardState}/>);
            break;
        case 1:
            temp = (<EmailSetup />);
            break;
        case 2:
            temp = (<PasswordSetup />);
            break;
        case 3:
            temp =  (<UsernameSetup />);
            break;
        case 4:
            temp = (<CategoriesSetup />);
            break;
    }
    return (<Modal {...this.props} title="Login" animation={false}>
            <div className="modal-body">
                <div>
                {temp}
                </div>
            </div>
        </Modal>)


var SignupSetup = React.createClass({
    render: function(){
        return (<Button onClick={this.props.setWizardState(1)}></Button>)
    }
});

Я хочу передать этот метод setWizardState из RegistrationModal в child RegistrationSetup как prop, но я получаю сообщение об ошибке

Uncaught Error: Invariant Violation: replaceState(...): Cannot update during an existing state transition (such as within Render ). Render methods should be a pure function of props and state.react.js:17122

4b9b3361

Ответ 1

Проблемы здесь:

<Button onclick={this.props.setWizardState(1)}></Button>

Сначала это опечатка (onClick, capital C). Но главная проблема заключается в том, что вы вызываете setWizardState, а onClick выполняет функцию. Вы должны частично применить его.

onClick={this.props.setWizardState.bind(null, 1)}

Ответ 2

Вы также можете использовать нотацию со стрелкой es6, если у вас есть компилятор, например Babel

<Button onclick={() => this.props.setWizardState(1)}></Button>

Ответ 3

Здесь ссылка на официальном сайте reactjs. Видимо, вам нужно привязать эту функцию вместо прямого применения.

onClick={this.setWizardState.bind(this, 1)}