Material-ui <Autocomplete /> getOptionLabel - 将空字符串作为值传递

Posted

技术标签:

【中文标题】Material-ui <Autocomplete /> getOptionLabel - 将空字符串作为值传递【英文标题】:Material-ui <Autocomplete /> getOptionLabel - passing empty string as value 【发布时间】:2020-11-06 01:21:21 【问题描述】:

我正在使用 material-ui 自动完成功能。我将一些状态数组传递给它的属性选项。我面临的问题是getOptionLabel:

Material-UI: The `getOptionLabel` method of Autocomplete returned undefined instead of a string for [""].

我有 2 个组件。孩子是:

const StateSelect = (props) => 
  const classes = useStyles();
  const handlePick = (e, v) => 
    props.setState(v);
  ;
  return (
    <Autocomplete
      className=classes.inputStyle
      options=states
      getOptionLabel=(option) => (option ? option.name : "")
      onChange=handlePick
      value=props.state
      renderInput=(params) => (
        <TextField ...params label="State" variant="outlined" />
      )
    />
  );
;

在父组件中,我调用了这个子组件:

 <StateSelect
            state=selectedState
            setState=(state) => setSelectedState(state)
          />

在父级中,我有控制 StateSelect 值的 React 钩子:

  const [selectedState, setSelectedState] = useState([""]);

所以当我最初将 selectedState 作为道具传递给 StateSelect 时,它是 [''] 并且我收到了此错误消息。如何将空值作为初始值传递而不出现此错误?

我上传了我的代码的简单版本:

https://codesandbox.io/s/smoosh-field-j2o1p?file=/src/inputStates/input.js

【问题讨论】:

据我所见,getOptionLabel 函数首先使用[""] 调用,它将在三元中返回 undefined。为什么默认状态是数组而不是空字符串? 【参考方案1】:

您的默认值是一个包含空字符串[""] 的数组,在三元组中评估时将返回true,因此尝试访问未定义的属性option.name。您需要对此进行测试或使用空字符串初始化状态,该字符串在 JS 中是一个虚假值。

【讨论】:

【参考方案2】:

我遇到了同样的错误。而且,以下内容对我有用。

getOptionLabel=(option) => option.name || ""

【讨论】:

【参考方案3】:

我遇到了类似的问题,我可以选择字符串数组。例如:["delhi", "new york", "mumbai"]。我通过添加一个检查来修复它,如果选项是一个字符串,如果不是一个空字符串。

getOptionLabel=(option) => typeof option === 'string'
                  || option instanceof String ? option : ""

【讨论】:

【参考方案4】:

我通过设置这样的值解决了这个问题。

getOptionLabel=(option)=>(option.name?option.name:'')

【讨论】:

以上是关于Material-ui <Autocomplete /> getOptionLabel - 将空字符串作为值传递的主要内容,如果未能解决你的问题,请参考以下文章

ReactJS + Material-UI:如何使用 Material-UI 的 <DatePicker> 将当前日期设置为默认值?

ReactJS with Material-UI:如何按字母顺序对 Material-UI 的 <TableRow> 数组进行排序?

Material-ui <Autocomplete /> getOptionLabel - 将空字符串作为值传递

Material-ui <Table/> 抛出一个Element type is invalid

如何在 Material-UI 中使按钮居中

Material-UI 主题化组件库