You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Material-UI Autocomplete组件内的单个选项添加自定义样式

解决方案

实现思路

  • Autocomplete组件提供了renderOption属性用于自定义选项的渲染逻辑,我们只需要在渲染每个选项时判断是否为你的收藏电影《Office Space》,匹配的话单独设置样式即可。
  • 你可以选择直接匹配电影标题,也可以给收藏的电影对象加个特殊标识字段(比如isFav: true),后续修改收藏内容更灵活。

修改后的完整代码

import { useState } from 'react';
import Autocomplete from '@mui/material/Autocomplete';
import TextField from '@mui/material/TextField';
import Typography from '@mui/material/Typography';

export default function Playground() {
  // 给收藏电影加标识,方便后续扩展多个收藏项
  const favMovie = {title: "Office Space", year: 1999, isFav: true}
  top100Films.push(favMovie)

  const defaultProps = {
    options: top100Films,
    getOptionLabel: (option) => option.title
  };

  const [movies, setMovies] = useState([]);

  return (
    <div style={{ width: 300 }}>
      <Autocomplete
        {...defaultProps}
        id="select-on-focus"
        selectOnFocus
        // 新增renderOption自定义选项渲染
        renderOption={(props, option) => (
          <li {...props}>
            <Typography color={option.isFav ? "primary" : "inherit"}>
              {option.title}
            </Typography>
          </li>
        )}
        renderInput={(params) => (
          <TextField {...params} label="movies" margin="normal" />
        )}
        onChange={(e, movie) => {
          if (movie) {
            setMovies([...movies, movie.title]);
          }
        }}
      />
    </div>
  );
}

// Top 100 films as rated by IMDb users. http://www.imdb.com/chart/top
const top100Films = [
  { title: "The Shawshank Redemption", year: 1994 },
  { title: "The Godfather", year: 1972 },
  // 其余电影数据
]

补充说明

如果不想给电影对象加额外字段,也可以直接在renderOption里判断option.title === "Office Space"来匹配目标选项,效果完全一致。

内容的提问来源于stack exchange,提问作者wolf_math

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:15:02