如何使材料 UI 的自动完成字段成为必需?

Posted

技术标签:

【中文标题】如何使材料 UI 的自动完成字段成为必需?【英文标题】:How to make autocomplete field of material UI required? 【发布时间】:2020-10-20 01:11:24 【问题描述】:

我尝试了几种方法来使材质 UI 的自动完成字段类型成为必需,但我没有得到我想要的行为。我已经将我的字段封装在反应钩子表单<Controller/> 中,但没有运气。当没有任何内容添加到字段时,我想在提交时触发消息“字段为必填项”。

下面是代码sn-p,我没有去掉cmets,这样其他人就更容易理解我之前采用的方法了-

  <Controller
        name="displayName"
        as=
          <Autocomplete 
                  value=lists
                  multiple
                  fullWidth
                  size="small"
                  limitTags=1
                  id="multiple-limit-lists"
                  options=moduleList
                  getOptionLabel=(option) => option.displayName
                  renderInput=(params,props) => 
                   return (
                      <div>
                        <div className="container">
                          <TextValidator ...params variant="outlined" label="Display Name*" className="Display Text" 
                            name="displayName"  id="outlined-multiline-static" 
                            placeholder="Enter Display-Name" size="small"
        onChange=handleDisplay
         // validators=['required'] this and below line does throw a validation but the problem is this validation stays on the screen when user selects something in the autocomplete field which is wrong.
        // errorMessages=['This field is required'] 
        // withRequiredValidator
        
                            />
                        </div>
                      </div>
                    )
                  
                  />
        
        // onChange=handleDisplay
        control=control
        rules= required: true 
        // required
        // defaultValue=options[0]
        />
        <ErrorMessage errors=errors name="displayName" message="This is required" />

【问题讨论】:

它可能默认返回空对象,为什么不使用validate函数。 【参考方案1】:

您可以使用以下逻辑来使其正常工作。虽然这可能不是最好的解决方案,但很有效。

<Autocomplete 
    renderInput=(params) => (
        <TextField
            ...params
            label=value.length === 0 ? title : title + " *" //handle required mark(*) on label 
            required=value.length === 0
        />
    )
/>

【讨论】:

【参考方案2】:

我尝试使用 textfield 中内置的 required 来自动完成,它就像一个魅力。也许你可以以此作为参考。

<Autocomplete
    renderInput=(params) => 
        <TextField ...params required />
    
    // Other codes
/>

【讨论】:

【参考方案3】:

由于您正在渲染&lt;TextValidator&gt;,因此您应该将强制(必需)属性应用于不在&lt;AutomComplete&gt; 上的组件。

【讨论】:

以上是关于如何使材料 UI 的自动完成字段成为必需?的主要内容,如果未能解决你的问题,请参考以下文章

React js材料ui自动完成芯片,里面有一个按钮

如何在反应材料-ui自动完成中实现最小字符长度功能

如何更改 Material ui 自动完成中选项的字体大小?

反应材料 ui 自动完成元素焦点 onclick

从材料 ui 处理自动完成组件的更改

Reactjs - 通过在自动完成组件(材料 UI)中的每个输入更改上点击 API 来更新选项