Material-UI <Autocomplete /> 标签与选项值不同
Material-UI <Autocomplete /> different label than option value
我有一个正在使用的 Material-UI <Autocomplete />
组件,您可以在其中输入某人的姓名,它会提供 select 的人员列表。这是一个非常标准的用例,但是我需要表单中的 selected 项目与标签不同。
目前,如果您选择标有 "John Smith" 的条目,文本字段将填充 "John Smith"。相反,我想用该用户的 ID 填充文本字段。
自动完成的数据是一个对象数组,如下所示:
{ "name": "John Smith", "id": 123456789 }
如何让自动完成组件将用户 ID 而不是用户标签放在文本字段中?
您可以在Material-UI Autocomplete
中自定义renderOption道具
Render the option, use getOptionLabel by default.
Signature: function(option: T, state: object) => ReactNode
option: The option to render.
state: The state of the component.
至于代码
getOptionLabel={option => option.name}
renderOption={(option) => <span>{option.name}</span>}
参考官方文档中的demo
如果你只是想在文本域中显示姓名,你可以试试这个
getOptionLabel={option => option.id}
renderOption={option => <>{option.name}</>}
如果您想在 TextField 和 OptionLabel 中显示名称,但想获取 id 作为 TextField 的值,以便在表单提交后存储 id。
你可以试试这个
getOptionLabel={(option) => option.name}
renderOption={(option) => (
<>
{option.name} ({option.surname})
</>
)}
onChange={(event, newValue) => {
setValue(newValue);
setCustomValue(newValue.id);
}}
使用 onChange 事件,您可以 select 您想要获取的选项的任何字段,因为 value.In 在这个示例中,我将选项的 ID 存储在状态中。
完整的工作示例在这里 https://codesandbox.io/s/material-demo-forked-wlzr8?file=/demo.js:804-1084
我有一个正在使用的 Material-UI <Autocomplete />
组件,您可以在其中输入某人的姓名,它会提供 select 的人员列表。这是一个非常标准的用例,但是我需要表单中的 selected 项目与标签不同。
目前,如果您选择标有 "John Smith" 的条目,文本字段将填充 "John Smith"。相反,我想用该用户的 ID 填充文本字段。
自动完成的数据是一个对象数组,如下所示:
{ "name": "John Smith", "id": 123456789 }
如何让自动完成组件将用户 ID 而不是用户标签放在文本字段中?
您可以在Material-UI Autocomplete
Render the option, use getOptionLabel by default.
Signature:function(option: T, state: object) => ReactNode
option: The option to render.
state: The state of the component.
至于代码
getOptionLabel={option => option.name}
renderOption={(option) => <span>{option.name}</span>}
参考官方文档中的demo
如果你只是想在文本域中显示姓名,你可以试试这个
getOptionLabel={option => option.id}
renderOption={option => <>{option.name}</>}
如果您想在 TextField 和 OptionLabel 中显示名称,但想获取 id 作为 TextField 的值,以便在表单提交后存储 id。 你可以试试这个
getOptionLabel={(option) => option.name}
renderOption={(option) => (
<>
{option.name} ({option.surname})
</>
)}
onChange={(event, newValue) => {
setValue(newValue);
setCustomValue(newValue.id);
}}
使用 onChange 事件,您可以 select 您想要获取的选项的任何字段,因为 value.In 在这个示例中,我将选项的 ID 存储在状态中。 完整的工作示例在这里 https://codesandbox.io/s/material-demo-forked-wlzr8?file=/demo.js:804-1084