reactjs - 在 freeSolo 模式下使用带有 react-hook-form 的 Material UI 自动完成功能

标签 reactjs material-ui react-hook-form

我正在尝试在自由独奏模式下使用 Material UI 的自动完成功能作为一种组合输入。用户应该能够通过自动完成选择建议的选项,或者如果没有可用选项,则输入值应用作最终表单值。

问题:

案例一:自动完成工作并建议可以选择和提交的选项,但是当输入具有自定义值时,它不会被提交。

https://codesandbox.io/s/autocomplete-free-solo-case-1-i7kin?file=/demo.js

情况二:提交了从自动完成和自定义输入值中选择的选项,但自动完成下拉列表不再显示建议,而是在选择输入的整个过程中保持打开状态

https://codesandbox.io/s/autocomplete-free-solo-case-2-uk9db?file=/demo.js

我可以接受第二种情况,因为我的自动完成列表只有几个选项,但如果有人有一些提示或解决方案,我会非常感激。

最佳答案

您正在使用 freeSolo ,但您没有添加 autoSelect选项,所以你的代码的问题是当 input失去焦点 - 值(value)仍然是旧的。这里的原因是您使用的是受控组件,但 Controller 是 react-hook-form。

您可以在这里有两个选择:

  • 添加 autoSelect ,因此即使用户失去对输入的关注 - 当前值也将是自动完成的值。
  • 要求用户打enter为了保存他现在拥有的值(value)。 (您可以使用 clearOnBlur 选项)。

  • 这是第一个选项的实现:
    <Autocomplete
      id="autocomplete"
      freeSolo
      autoSelect
      options={["option1", "option2", "another option"]}
      renderInput={params => (
        <TextField
          {...params}
          label="freeSolo"
          margin="normal"
          variant="outlined"
        />
      )}
    />
    

    和一个工作示例(基于您的代码和框):https://codesandbox.io/s/autocomplete-freesolo-with-auto-value-on-blur-e2smn?file=/demo.js

    关于reactjs - 在 freeSolo 模式下使用带有 react-hook-form 的 Material UI 自动完成功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61549813/

    相关文章:

    React-hook-form FormContext 默认值问题

    javascript - TreeView 中的 React.js 搜索过滤器

    javascript - 如何在 reactjs 中管理树组件中的状态

    javascript - 在 React-Three-Fiber 中渲染索引缓冲区几何

    reactjs - ReduxForm : using formValueSelector within a FieldArray for conditional fields doesn't render immediately

    reactjs - mui 使用入口点插入作用域影子 DOM 样式时选择未设置样式的下拉选项

    javascript - 在Reducer中使用.json渲染FlatList中的prop

    css - 自定义 CardActionArea 悬停效果

    react-hook-form - 如何使用 `react-hook-form` 突变正确提交 `react-query`?

    reactjs - react Hook 形式 Material ui文件上传不给FileList