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

MUI Datatable customSearch报错:已返回布尔值仍提示需返回布尔值

问题原因与解决方案

核心问题:async函数返回的是Promise而非布尔值

你的customSearch是async函数,这类函数默认返回Promise对象,不是你定义的isFound布尔值。而MUI Datatable的customSearch要求同步返回布尔值,所以控制台会抛出“customSearch must return a boolean”的错误——它实际收到的是Promise,不是预期的布尔值。

为什么功能还能正常运行?

虽然返回值不符合组件要求,但你在函数内部直接调用setState更新了表格数据,所以界面能显示搜索结果,但组件的校验逻辑因为拿到非布尔值的返回结果,还是会报错。

解决方案:移除async/await,改用Promise链式调用

customSearch不支持异步返回值,你需要调整函数结构,不要用async声明:

修改后的代码示例

customSearch: (searchQuery) => {
  let isFound = false;
  if (searchQuery.length > 2 && enterPressed && enterLocked === false) {
    // 用Promise链式调用替代async/await
    apiFetch('GET', { endPoint: `patients/?name=${searchQuery}` })
      .then(res => {
        const resultado = res.data;
        if (resultado.length !== 1) {
          resultado.forEach((dataRes, index) => {
            dataRes.sync = true;
            resultado[index] = dataRes;
          });
          isFound = true;
        }
        this.setState({
          data: parsePatientsList(resultado, literals.active),
          itemsLoaded: itemsLoaded + resultado.length,
          pagesLoaded: pagesLoaded + Math.floor(resultado.length / 10) + 1,
          patientList: [...patientList, ...resultado], // 原代码的...data是笔误,改为resultado
          enterPressed: false,
          enterLocked: true,
        });
      })
      .catch(err => {
        console.error('搜索请求失败:', err);
      });
    // 同步返回布尔值,通过组件校验
    return isFound;
  }
  return isFound;
}

额外优化建议

MUI Datatable的customSearch设计初衷是本地数据过滤,而你的场景是调用接口获取新数据,更合理的做法是把搜索逻辑从customSearch中抽离:比如给搜索框绑定回车事件,触发接口请求后直接更新表格的data属性,这样完全避开组件的校验限制,逻辑也更清晰。

内容的提问来源于stack exchange,提问作者Juan Francisco Ruiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:31:02