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

React Material-Table编辑下拉框API数据填充为空问题求助

解决material-table编辑模式下拉框为空的问题

我来帮你搞定这个问题!你遇到的核心问题是material-table的lookup属性要求传入一个键值对格式的对象,但你当前从API获取并处理后的myUserData是一个包含多个单键对象的数组,格式完全不匹配,所以下拉框无法识别这些选项。

问题分析

你现在的myUserData格式是这样的:

[{"DaChZYtatmVUXskSSzg9GTMsh4J3":"Peter Andri"},{"A1AtLoKhnwctu7Wwxtv85sLwDGj2":"Christine Wood"}]

但material-table的lookup需要的是这种结构的对象:

{
  DaChZYtatmVUXskSSzg9GTMsh4J3: 'Peter Andri',
  A1AtLoKhnwctu7Wwxtv85sLwDGj2: 'Christine Wood'
}

解决方案:调整数据处理逻辑

我们只需要修改getUsers函数中处理返回数据的方式,直接构建符合要求的键值对对象,而不是数组:

1. 修改getUsers函数

const getUsers = () => {
  const myToken = Cookies.get('access_token');
  if (myToken === undefined) {
    history.push('/auth/login-page');
  } else {
    try {
      const myUrl = `${APIurl}users.json?orderBy="active"&equalTo=1`;
      axios.get(myUrl).then((res) => {
        console.log(res.data);
        const myData = res.data;
        // 初始化一个空对象来存储用户键值对
        const usersLookup = {};
        for (var key1 in myData) {
          const userId = myData[key1].userUid;
          const userName = `${myData[key1].firstName} ${myData[key1].lastName}`;
          // 直接把用户ID和姓名存入对象
          usersLookup[userId] = userName;
        }
        // 更新状态为这个键值对对象
        setmyUserData(usersLookup);
      });
    } catch (err) {
      console.log(err);
    }
  }
};

2. 调整myUserData的初始状态

确保你的状态初始值是空对象(而不是数组):

const [myUserData, setmyUserData] = useState({});

3. 更新列配置中的lookup

现在可以直接把myUserData传给lookup了:

{ 
  title: 'Posted by', 
  field: 'listingPersonId', 
  lookup: myUserData, 
},

为什么之前硬编码的能正常工作?

因为你硬编码的内容正好是lookup需要的键值对对象格式,而API处理后的数组结构无法被material-table识别,所以下拉框显示为空。

这样修改后,当API返回用户数据时,会自动转换成正确的格式,编辑模式的下拉框就能正常显示用户选项了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:12:31