victorzadorozhnyy
@victorzadorozhnyy

Почему возникает ошибка Cannot read property 'setState' of undefined?

Где ошибка в методе resetUsers: this.handleAlertDismiss ?
Cannot read property 'setState' of undefined

super(...props);
        this.state = {
           showModal: true,
            ...
           //handleAlertDismiss Не работает
            resetUsers: this.props.resetUsers || this.handleAlertDismiss
        };
        this.handleAlertDismiss = this.handleAlertDismiss.bind(this);
    }

    handleAlertDismiss() {
        this.setState({showModal: false});
    }

    render() {
        const {resetUsers} = this.state;
        return (
            <div>
                <Modal show={this.state.showModal} bsSize="sm">
                         <Alert bsStyle={this.state.alertStyle} 
                                   showModal={this.state.showModal} 
                                   onDismiss={ this.state.resetUsers }>
                           
                                <Button onClick={resetUsers} >Gotcha!</Button>
                        </Alert>
                </Modal>
            </div>
        );
  • Вопрос задан
  • 758 просмотров
Решения вопроса 1
В конструкторе вашем ошибка. Вы сначала в this.state.resetUsers кладете значение ссылки на функцию, потом переопределяете эту функцию через bind, но this.state.resetUsers остается со старой ссылкой. В javascript копирование и передача производится by sharing
Решения
1) Биндим в лоб
<Button onClick={resetUsers.bind(this)} >Gotcha!</Button>

2) Вместо
this.handleAlertDismiss = this.handleAlertDismiss.bind(this);
пишем
this.state.resetUsers = this.state.resetUsers.bind(this);

3) Делаем правильную ссылку
constructor() {
		super(...props);
		this.handleAlertDismiss = this.handleAlertDismiss.bind(this);
		this.state = {
			showModal: true,
			resetUsers: this.handleAlertDismiss
		};
	}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект
01 мая 2024, в 00:20
15000 руб./за проект