【发布时间】:2018-12-09 15:58:29
【问题描述】:
我在 Material UI 的“选择”上玩得很开心 - 花了大约 10 个小时才试图让一个按我喜欢的方式工作。非常感谢您的帮助。
这个问题与前一个问题有关:Select MenuItem doesn't show when JSX saved to state,我怀疑如果回答了“为什么”,我可能会更好地了解正在发生的事情。
我想要完成的是拥有一个可以执行以下正常操作的 Select:
- 拥有所有 UI 好东西(在选择位置显示问题,然后 在您选择一个 非空选择)
- 选择某项后,标签会出现(正如人们在 下拉)而不是空白(正如我所经历的那样 - 检查 上一个问题)
- 控制台中没有关于“值”未定义的警告
- 当我在选择某些内容后单击离开选择时,我没有 希望问题标签回到答案的顶部,如下所示:
- 我想要一个“无”选项,将选择返回为“空” 表格(也就是说,问题标签以正常大小显示在 选择)
- 我可以设置一个默认选中的选项
这些不应该是艰巨的任务,但我一辈子都做不到。挺尴尬的。
- 然后,在选择某些内容时,我想保存该选择(连同 与其他选择选项)状态(所以我可以将其保存到 localStorage,因此较大的表单不会在页面刷新时“重置”)
无论哪种方式,我目前都有这个 JSX - 实际上是从材料 ui 演示中剪切和粘贴的,带有 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 看起来像这样 - 再次,与材质 UI 演示完全相同。
handleSelectChange = event => {
this.setState({ [event.target.name]: event.target.value });
};
除了控制台之外的这种工作给我以下错误:
失败的道具类型:道具
value被标记为必填项SelectInput,但其值为undefined。
此外,如果我尝试添加此代码(在 componentDidMount 函数中)以能够传入“选定”/默认选项...
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});
}
}
}
它不会更新给我一个默认答案,并且还会在控制台中给我以下附加错误(除了上述所有问题):
警告:组件正在更改隐藏类型的不受控制的输入 被控制。输入元素不应从不受控制的状态切换 控制(反之亦然)。决定使用受控或 在组件的生命周期内不受控制的输入元素。
我错过了什么?
【问题讨论】:
标签: javascript reactjs material-ui