Ste*_*her 2 autocomplete maxlength reactjs material-ui
因此,我使用了 Material-UI 自动完成功能,并将“free solo”设置为 true,并尝试限制您可以输入的字符数。
仅供参考,使用的是 "@material-ui/core": "^4.10.0", "@material-ui/lab": "^4.0.0-alpha.54",
我尝试将 maxLength 添加到内部 TextField 上的 InputProps 作为属性,但没有任何乐趣。我决定发布我想出的答案,因为它并不明显。
<Autocomplete
freeSolo
options={
optionType === "alpha"
? alpha_options.map((option) => option.behavior)
: beta_options.map((option) => option.behavior)
}
onInputChange={(event, value) => {
setBehavior(value);
}}
renderInput={(params) => (
<TextField
{...params}
className={classes.input}
inputProps={{ ...params.inputProps, maxLength: process.env.REACT_APP_ENTRY_MAX_LENGTH}}
autoFocus={false}
margin="dense"
id="behavior"
label="Behavior"
placeholder="Complete this sentence"
type="text"
variant="outlined"
fullWidth
/>
)}
/>
Run Code Online (Sandbox Code Playgroud)
以下是关键真相:
1) InputProps 和 inputProps 不是一回事。来自 TextField 上的 MUI 文档....
是的,我知道这是非常愚蠢和令人沮丧的。
2) 在 AutoComplete 中,TextField 是 AutoComplete 本身的子组件。为了保留这种甜蜜的、甜蜜的 AutoComplete 功能优点,您必须将AutoComplete的 inputProps传递给 TextField。
因此这一行:
inputProps={{ ...params.inputProps, maxLength: process.env.REACT_APP_ENTRY_MAX_LENGTH}}
Run Code Online (Sandbox Code Playgroud)
也就是说,使用扩展运算符,获取 params 中的所有 inputProps,并将它们扩展到 TextField 的 inputProps,然后使用 maxLength 添加到其中。process.env 值只是存储在我的 create-react-app 的 .env 文件中的值。
别客气。