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

React JS中Axios+MUIDataTable无法显示数据问题求助

排查MUIDataTable显示空表的问题

我来帮你一步步梳理代码里的问题,你的空表问题主要是语法错误和数据格式/渲染逻辑不匹配导致的,下面是具体的修正方案:

1. 先修复明显的语法错误

你的代码里有两处语法错误,直接导致组件无法正常编译渲染:

  • columns数组的引号未闭合:const columns = ["ID","Name]; → 应该改成 const columns = ["ID", "Name"];
  • render方法里多余的map代码语法完全错误(括号不匹配、变量定义混乱),而且这段代码是重复渲染,完全没必要保留,直接删掉就行

2. 调整数据格式适配MUIDataTable

MUIDataTable接收的data有两种格式:

  • 二维数组:[[id1, name1], [id2, name2]]
  • 对象数组:需要配合带field属性的columns配置,比如[{name: "ID", field: "id"}, {name: "Name", field: "name"}]

方案一:用二维数组(适合简单场景)

在Axios的响应处理中,把接口返回的对象数组转换成二维数组:

axios(option)
  .then(response => {
    // 假设response.data.data是[{id: 1, name: "张三"}, {id:2, name:"李四"}]这样的对象数组
    const tableData = response.data.data.map(item => [item.id, item.name]);
    this.setState({
      data: tableData,
      isLoading: false,
    });
    console.log(response.data);
  })

方案二:用对象数组(更灵活,适合多字段场景)

修改columns的定义,指定每个列对应的字段名,这样不需要转换数据:

// 替换原来的columns定义
const columns = [
  { name: "ID", field: "id" },
  { name: "Name", field: "name" }
];

// Axios响应里直接赋值即可
this.setState({
  data: response.data.data,
  isLoading: false,
});

3. 完善状态逻辑

  • 统一错误状态变量名:你state里定义的是errors,但catch里设置的是error,改成一致的error: null
  • 增加错误状态的渲染,方便排查请求失败的情况
  • 调整加载状态的显示时机,避免表格和加载提示同时出现

修正后的完整代码

import React,{Component} from "react";
import ReactDOM from "react-dom";
import MUIDataTable from "mui-datatables";
import axios from "axios";
import { Link } from 'react-router-dom';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      data: [],
      isLoading: true,
      error: null, // 统一错误状态变量名
    };
  }

  getData = () => {
    const option = {
      url: "url/api",
      method: 'POST',
      data: {
        "data": {
          "name": "...",
          "id":"..."
        },
        "encrypt": 0
      }
    };
    axios(option)
      .then(response => {
        // 这里用方案二的对象数组方式,不需要转换数据
        this.setState({
          data: response.data.data,
          isLoading: false,
        });
        console.log("接口返回数据:", response.data);
      })
      .catch(error => {
        console.error("请求出错:", error.response);
        this.setState({ error, isLoading: false })
      });
  }

  componentDidMount() {
    this.getData();
  }

  render() {
    const { isLoading, data, error } = this.state;
    // 用对象数组对应的columns配置
    const columns = [
      { name: "ID", field: "id" },
      { name: "Name", field: "name" }
    ];
    const options = {
      filterType: "dropdown",
      responsive: "scroll",
      selectableRows: false
    };

    // 处理错误状态
    if (error) {
      return <div className="error">加载数据失败:{error.message}</div>;
    }

    return (
      <div>
        <center><h3>List Data</h3></center><br/>
        {isLoading ? (
          <p>Loading...</p>
        ) : (
          <MUIDataTable columns={columns} options={options} data={data} />
        )}
      </div>
    );
  }
}

ReactDOM.render(<App />, document.getElementById("root"));
export default App

额外排查建议

  1. 打开浏览器开发者工具(F12),查看Console面板,确认是否还有语法错误或者接口请求错误
  2. 检查接口返回的response.data.data格式是否正确,确保是数组,且每个元素包含id和name字段(和你的columns配置对应)
  3. 如果接口返回的数据结构和你预期的不一样,需要调整response.data的取值路径(比如可能是response.data而不是response.data.data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 10:47:49