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

React中Material UI Autocomplete组件过滤选项不符合预期问题

问题:Material UI Autocomplete组件过滤结果不符合预期

输入“DUMMY”时,本该仅显示一个匹配项,但当前显示了多个项。

复现代码

import * as React from "react";
import Typography from "@mui/material/Typography";
import TextField from "@mui/material/TextField";
import Autocomplete, { createFilterOptions } from "@mui/material/Autocomplete";

const _filterOptions = createFilterOptions();

export default function ComboBox() {
  const [optionCount, setOptionCount] = React.useState(0);
  const [options, setOptions] = React.useState(top100Films);
  const filterOptions = React.useCallback((options, state) => {
    const results = _filterOptions(options, state);

    if (optionCount !== results.length && results) {
      setOptionCount(results.length);
      //setOptions(results);
    }

    return results;
  }, []);

  return (
    <>
      <Typography mb={2}>Option count: {optionCount}</Typography>
      <Autocomplete
        filterOptions={filterOptions}
        options={options}
        sx={{ width: 300 }}
        renderInput={(params) => <TextField {...params} label="Movie" />}
      />
    </>
  );
}

问题原因

  1. 闭包依赖缺失:filterOptions使用React.useCallback但未将optionCount加入依赖数组,函数内部始终捕获初始值0。每次过滤时,只要结果长度不为0,就会触发setOptionCount,导致组件频繁重渲染。
  2. 过滤流程被状态更新干扰:filterOptions的核心职责是返回过滤后的选项,在此函数内调用setState会触发不必要的重渲染,打乱Autocomplete的内部过滤逻辑,最终导致显示错误的选项列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:13:16