下拉列表看起来和工作正常,但不会更新新的选择,我收到以下错误消息:
警告:在< select>上使用`defaultValue`或`value`道具而不是在< option>上设置`selected`。
未在< option>上设置已选择据我所知,所以它必须由material-ui的组件设置。无论如何,如果我将值更改为defaultValue,我会收到以下错误消息:
aterial-UI:当`select`组件使用`native = false`(默认)时,需要`value`属性。
我认为这是Material-ui本身的一个问题,但是他们的例子工作得很好,尽管像我这样的例子中没有父/子组件。
例:
https://codesandbox.io/s/7yk922om7x
我的代码(为简洁起见缩短):
构造函数(道具){
超(道具)
this.state = {
languageValues:{
htmlFor:'lstLanguages',
价值:'英语',
输入:<输入名称=“语言”id =“lstLanguages”/>,
选项:[
{value:'dutch',text:'Nederlands'},
{value:'french',text:'Français'},
{value:'english',text:'English'},
{value:'german',text:'Deutsch'}],
helperText:'选择你的语言',
}
}
}
handleChange = event => {
event.preventDefault();
this.setState({[event.target.name]:event.target.value});
}
render(){
回来(
< DIV>
< h2 id =“speechTitle”>语音设置< / h2>
< HR />
< FormGroup column ='true'>
<下拉
dataToFill = {this.state.languageValues}
onChange = {this.handleChange.bind(this)}
/>
Dropdown.js:
const DropDown =({dataToFill})=> {
const menuItemValueList = dataToFill.options.map((item,i)=> {
返回< MenuItem值= {item.value} key = {i}> {item.text}< / MenuItem> //始终提供密钥
})
回来(
< FormGroup column ='true'>
< FormControl>
< InputLabel htmlFor = {dataToFill.htmlFor}>语言< / InputLabel>
<选择
defaultValue = {dataToFill.value}
input = {dataToFill.input}
>
{menuItemValueList}
< /选择和GT;
< FormHelperText> {dataToFill.helperText}< / FormHelperText>
< / FormControl>
< / FormGroup>
);
}
编辑1
我想我已经找到了问题:handleChange函数需要[event.target.name]但是需要更改的值嵌套在状态中,我不知道如何访问它...
事件处理程序代码
handleChange = event => {
this.setState({[event.target.name]:event.target.value})
}
嵌套状态对象:
languageValues:{
htmlFor:'lstLanguages',
价值:'英语',
输入:<输入名称=“语言”id =“lstLanguages”/>,
选项:[
{value:'dutch',text:'Nederlands'},
{value:'french',text:'Français'},
{value:'english',text:'english'},
{value:'german',text:'German'}
]
helperText:'选择你的语言',
},