victorzadorozhnyy
@victorzadorozhnyy

Почему setState не работает в данном случае?

Не могу заставить функцию change менять state open:
export class UserFirstForm extends Component {

    constructor(...args) {
        super(...args);
        this.state = {
            open: false,
            value: 'select'
        };
    }

    change(){
        console.log("WTF");
        this.in.state({ open: !this.state.open })
    }

    render() {
return (
            <div>

                <form>

                    <Input type="select" value={this.state.value} label="Please select who the Activity is in relation to:" placeholder="Select"
                           onChange={this.change}>
                        <option value="Patient">Patient</option>
                        <option value="Escort">Escort</option>
                        <option value="Carer">Carer</option>
                        <option value="Family">Family Member</option>
                        <option value="Other" >Other</option>
                    </Input>


                    <Button onClick={()=> this.setState({ open: !this.state.open })}>
                        click
                    </Button>

                    <Collapse in={this.state.open} ref="myCol">
                        <div>
                            <Well>
                                Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad 
                            </Well>
                        </div>
                    </Collapse>

при этом this.setState({ open: !this.state.open })}> работает и в change() все заходит
  • Вопрос задан
  • 2711 просмотров
Решения вопроса 1
Вы банально теряете указатель на this:
<Input ... onChange={this.change}>

Попробуйте сделать автобинд:
change = () => {
        console.log("WTF");
        this.setState({ open: !this.state.open })
    };


UPD1
Или биндите ее в конструкторе (равносильно методу выше, но это не удобно)
constructor(...args) {
        super(...args);
        this.state = {
            open: false,
            value: 'select'
        };
        this.change = this.change.bind(this)
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы