[Редактировать: реквизиты доступны только для чтения, и хотя мой исходный ответ и принятый ответ были идентичны и выполняют свою задачу, я корректирую свой ответ, чтобы показать «правильный» способ сделать это посредством манипулирования состоянием, а не реквизитом.]
Я не знаю, почему вы отслеживаете изменения на this.props
вместо this.state
, но есть один способ :
Для добавления в конструктор:
this.state = { toggleOne: this.props.toggleOne, toggleTwo: this.props.toggleTwo }
Для Toggle One:
onChange={ () => this.setState({ toggleOne: !this.state.toggleOne, toggleTwo: !this.state.toggleOne ? false : this.state.toggleTwo }) }
Для Toggle Two:
onChange={ () => this.setState({ toggleTwo: !this.state.toggleTwo, toggleOne: !this.state.toggleTwo ? false : this.state.toggleOne }) }
И изКонечно, установите атрибуты checked
на this.state.toggledOne/Two
.
Логика:
- Установите нас в противоположное состояние.
- Если наше текущее состояниевыключено (false), и мы включены (! false), выключите нашего соседа (false);если мы включаем и выключаем, оставьте нашего соседа там, где он есть (который в большинстве случаев будет выключен, потому что мы только что были включены).
Моя дополнительная проверка истина / ложь в конце по сравнению со значением по умолчанию false
в принятом ответе предназначена для выявления случая, когда оба переключателя были открыты преднамеренно (т.е. программно).Возможно, это не относится к вашему сценарию, но для тех, кто ищет подобное решение и может захотеть эту функцию, она у вас есть.