У меня чертовски много времени с Материалом пользовательского интерфейса «Выбор» - около 10 часов, пытаясь заставить его работать так, как мне хотелось бы. Буду очень признателен за помощь.
Этот вопрос относится к предыдущему: Выберите MenuItem, который не отображается, когда JSX сохранен в состояние , и я подозреваю, что, если на этот вопрос ответили «почему», я мог бы получить лучшее представление о что происходит.
То, что я пытаюсь сделать, - это выбор, который делает следующие нормальные вещи:
- имеет все вкусности пользовательского интерфейса (показывает вопрос в выбранном месте, затем
перемещает вопрос меньше и удаляет его после выбора
ненулевой выбор)
- при выборе чего-либо появляется метка (как и следовало ожидать в
выпадающий), а не пустой (как я испытал - проверьте
предыдущий вопрос)
- в консоли нет предупреждений о том, что значение не определено
- когда я выбираю что-то после выбора, я не
хочу, чтобы метка вопроса переместилась обратно на верх ответа так:
- Мне нужна опция none, которая возвращает выбор обратно в пустое состояние.
форма (то есть метка вопроса показывает в нормальном размере в
выберите)
- Я могу установить выбор, который будет выбран по умолчанию
Это не должно быть трудным заданием, но я не могу этого добиться. Это довольно неловко.
- Затем, выбрав что-то, я хочу сохранить этот выбор (вместе
с другими вариантами выбора), чтобы заявить (чтобы я мог сохранить его в
localStorage, чтобы при обновлении страницы более крупная форма не «сбрасывалась»
В любом случае, в настоящее время у меня есть этот JSX - фактически вырезанный и вставленный из демонстрационных материалов пользовательского интерфейса с картой для MenuItems
:
<FormControl className={classes.formControl}>
<InputLabel htmlFor={this.props.label}>{this.props.label}</InputLabel>
<Select
value={this.state.selectLabel}
onChange={this.handleSelectChange}
inputProps={{
name: 'selectLabel',
id: this.props.label,
}}
>
{this.props.value.map(valueLabelPair =>
<MenuItem
key={this.props.XMLvalue + "_" + valueLabelPair.label}
value={valueLabelPair.value}
>
{valueLabelPair.label}
</MenuItem>
)}
</Select>
</FormControl>
handleSelectChange выглядит следующим образом - опять же, точно так же, как демонстрация пользовательского интерфейса материала.
handleSelectChange = event => {
this.setState({ [event.target.name]: event.target.value });
};
Этот вид работ, за исключением консоли, выдает следующую ошибку:
Неудачный тип пропеллера: пропеллер value
помечен как требуется в
SelectInput
, но его значение равно undefined
.
и выбранный вариант и метка вопроса располагаются друг над другом после щелчка, например:
Далее, если я попытаюсь добавить этот код (в функцию componentDidMount) с целью возможности передать параметр "selected" / default ...
componentDidMount() {
for (var i = 0; i < this.props.value.length; i++) {
if(this.props.value[i].selected) {
// *works* console.log("selected found: " + this.props.value[i].label);
this.setState({selectLabel:this.props.value[i].label});
}
}
}
он не обновляет, дает мне ответ по умолчанию, а также дает мне следующую дополнительную ошибку в консоли (в дополнение ко всем вышеуказанным проблемам):
Предупреждение: компонент изменяет неконтролируемый ввод скрытого типа
быть под контролем. Элементы ввода не должны переключаться с неконтролируемого
контролируемый (или наоборот). Выберите между использованием контролируемого или
неуправляемый элемент ввода для времени жизни компонента.
Чего мне не хватает?