如何使用 renderOption 在自动完成 material ui 中设置列表选项的样式?
How to style list option in Autocomplete material ui with use of renderOption?
我正在努力自定义自动完成列表中的选项元素。我想通过使用 renderOptions 道具来做到这一点,我可以在其中创建 DOM 元素。然后,我可以很容易地使用 sx 或样式组件添加样式。
但是出了点问题。当我尝试呈现包裹在 div 中的选项列表元素时,电影的名称被隐藏(?)
它们被渲染了,因为我仍然可以选择选项,之后它显示为选中状态,但输入列表仍然损坏,并且未应用 CSS 样式。
我错过了什么?自动完成及其样式对我来说是新的。
代码:
<Autocomplete
freeSolo
id="free-solo-2-demo"
disableClearable
options={top100Films.map((option) => option.title)}
renderOption={(props, option) => {
return (
<li {...props}>
<div
sx={{
backgroundColor: "red",
color: "orange"
}}
>
{option.title}
</div>
</li>
);
}}
renderInput={(params) => (
<TextField
{...params}
label="Search input"
InputProps={{
...params.InputProps,
type: "search"
}}
/>
)}
/>
</Stack>
);
}
这是演示:https://codesandbox.io/s/freesolo-material-demo-forked-dupxol?file=/demo.js
TL;DR 只需将 renderOption
prop 中的 option.title
更改为 option
即可。并使用 Box
而不是 div
来应用样式。
我找不到它在文档中明确说明,但显然传递给 options
的每个元素随后都作为 option
参数传递给 renderOption
。
因此,由于您已经将 option.title
字符串数组传递给 options
,因此您需要像 renderOption
prop.option
中那样引用它们。
MUI 组件使用 sx
属性。所以请将 div
更改为 renderOption
内的 MUI Box
组件。 Box
是专门创建的 for such cases.
我正在努力自定义自动完成列表中的选项元素。我想通过使用 renderOptions 道具来做到这一点,我可以在其中创建 DOM 元素。然后,我可以很容易地使用 sx 或样式组件添加样式。
但是出了点问题。当我尝试呈现包裹在 div 中的选项列表元素时,电影的名称被隐藏(?) 它们被渲染了,因为我仍然可以选择选项,之后它显示为选中状态,但输入列表仍然损坏,并且未应用 CSS 样式。
我错过了什么?自动完成及其样式对我来说是新的。
代码:
<Autocomplete
freeSolo
id="free-solo-2-demo"
disableClearable
options={top100Films.map((option) => option.title)}
renderOption={(props, option) => {
return (
<li {...props}>
<div
sx={{
backgroundColor: "red",
color: "orange"
}}
>
{option.title}
</div>
</li>
);
}}
renderInput={(params) => (
<TextField
{...params}
label="Search input"
InputProps={{
...params.InputProps,
type: "search"
}}
/>
)}
/>
</Stack>
);
}
这是演示:https://codesandbox.io/s/freesolo-material-demo-forked-dupxol?file=/demo.js
TL;DR 只需将 renderOption
prop 中的 option.title
更改为 option
即可。并使用 Box
而不是 div
来应用样式。
我找不到它在文档中明确说明,但显然传递给 options
的每个元素随后都作为 option
参数传递给 renderOption
。
因此,由于您已经将 option.title
字符串数组传递给 options
,因此您需要像 renderOption
prop.option
中那样引用它们。
MUI 组件使用 sx
属性。所以请将 div
更改为 renderOption
内的 MUI Box
组件。 Box
是专门创建的 for such cases.