#javascript #reactjs #redux #material-ui
#javascript #reactjs #redux #материал-пользовательский интерфейс
Вопрос:
Я создаю переключатель, который считывает проверенное значение из значения, которое я извлекаю из серверной части, и когда пользователь переключает его, на серверную часть отправляется запрос PUT для обновления выбора.
Это то, что у меня есть до сих пор, переключатель не отображает ответ, чего мне здесь не хватает
class Test extends Component {
constructor(props) {
super(props);
this.state = {
toggleValue: ''
}
}
componentDidMount() {
this.props.getToggleValue();
}
toggleValue = () => {
if(this.props.value){
return this.props.value.toggleValue
}
}
handleChange(field) {
return (event) => {
this.setState({
[field]: event.target.value,
});
}
}
render() {
return (
<>
<Switch value={this.state.toggleValue} checked={this.toggleValue()} onChange={this.handleChange('toggleValue')} />
</>
)
}
const mapStateToProps = (state, ownProps) => {
return {
...ownProps,
value: state.testReducer.value
};
}
const mapDispatchToProps = (dispatch) => {
return bindActionCreators({
getToggleValue
}, dispatch);
};
Комментарии:
1. Я предполагаю, что
value={this.toggleValue()
должно бытьvalue={this.toggleValue}
?2. только что внес некоторые правки в мой пост @ChrisG
Ответ №1:
Вы должны проверять event.target.checked
и не event.target.value
handleChange(field) {
return (event) => {
this.setState({
[field]: event.target.checked,
});
}
}
Комментарии:
1. Я получаю это предупреждение об ошибке: компонент изменяет флажок «неконтролируемый ввод типа», которым нужно управлять. Элементы ввода не должны переключаться с неконтролируемого на контролируемый (или наоборот). Выберите между использованием контролируемого или неконтролируемого элемента ввода в течение срока службы компонента.
2. Это потому, что вы получаете проверенное значение
Switch
компонента из реквизитов, и когда оно меняется, вы обновляете состояние. Попробуйте настроитьchecked={this.state.toggleValue}
в вашемSwitch
компоненте.3. Тогда как бы я показал состояние переключателя, полученного из серверной части, когда пользователь посещает эту страницу. После этого мне нужно отправить ответ put при переключении. Можете ли вы помочь мне с этим
4. На самом деле вам нужно решить, используете ли вы переменную в состоянии вашего компонента для получения / установки проверяемого значения переключателя (контролируемый режим) или вы управляете им вручную, например, с помощью реквизитов (неконтролируемый режим). Здесь вы получаете ошибку, потому что вы смешиваете контролируемый и неконтролируемый режимы. (Установка значения в состояние и получение его из реквизитов).
5. Решением могло бы быть помещать значение из
props
в вашstate
каждый раз, когда оно изменяется (вcomponentDidUpdate
), а затем использовать значение в состоянии в вашемSwitch
.