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

如何获取与设置Material-UI Autocomplete多选值?按指南实现后无法取值

解决Material-UI多选Autocomplete无法获取值的问题

你的代码核心问题在于onChange事件的处理逻辑错误:当开启multiple模式时,onChange回调的newValue参数已经是当前所有选中项组成的数组,不需要再和原状态数组拼接,否则会形成嵌套数组(比如选第二个选项时,状态会变成[之前的数组, 新的选中数组]),导致无法正确获取选中值。

修正后的代码

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

// 定义类型,避免使用any
type Category = {
  id: number;
  name: string;
};

const categories: Category[] = [
  { id: 1, name: "blog" },
  { id: 2, name: "music" },
  { id: 3, name: "video" },
];

export default function CategoryAutocomplete() {
  // 明确状态类型
  const [category, setCategory] = useState<Category[]>([]);

  // 测试获取值的方法
  const handleSubmit = () => {
    console.log("选中的分类:", category);
    // 这里可将category提交到后端或做其他处理
  };

  return (
    <>
      <Autocomplete
        multiple
        limitTags={1}
        value={category}
        // 直接用newValue更新状态
        onChange={(event, newValue) => {
          setCategory(newValue);
        }}
        id="category-filter"
        options={categories}
        getOptionLabel={(option) => option.name}
        renderInput={(params) => (
          <TextField {...params} label="Category" placeholder="categories" />
        )}
      />
      {/* 按钮用于测试获取选中值 */}
      <button onClick={handleSubmit}>查看选中值</button>
    </>
  );
}

关键修正点

  • 移除错误的数组拼接逻辑,直接将newValue赋值给状态
  • 添加明确的类型定义,替换any类型,提升代码可读性与类型安全
  • 增加handleSubmit函数示例,展示如何在需要时获取选中的category状态值

现在你可以通过category状态直接获取所有选中的选项,比如在表单提交时使用这个状态即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:03:30