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

React项目中如何移除jQuery DataTables顶部的“No data available in table”提示?

解决jQuery DataTables显示"No data available in table"但实际有数据的问题

这个问题的核心原因很明确:DataTables在你的React组件还没拿到USGS API的地震数据时就已经初始化了。此时表格的tbody是空的,所以DataTables自动显示了"No data available in table"的提示;等API数据加载完成后,React渲染了表格行,但DataTables没有感知到DOM的变化,导致提示和真实数据同时显示。

下面给你几个针对性的解决方案,按推荐程度排序:

方案1:在数据加载完成后初始化DataTables

把DataTables的初始化逻辑放在setState的回调函数里,确保只有当数据已经更新到state并准备好渲染后,才让DataTables接管表格:

constructor(props) {
  super(props);
  // 初始化state时把posts设为空数组,避免undefined报错
  this.state = {
    posts: [],
    error: ''
  };
}

componentDidMount(){
 axios.get('https://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=2014-01-01&endtime=2014-01-02')
 .then(response =>{
   console.log(response)
   this.setState({ posts : response.data.features },()=>{
     // 数据加载完成后再初始化DataTables
     $('#earthquakes').DataTable({
       // 可以在这里添加你的DataTables配置,比如分页、排序等
     });
   })
 })
 .catch(error =>{
   console.log(error)
   this.setState({ error : 'Error retrieving data' })
 })
}

方案2:数据更新时刷新DataTables(应对组件重新渲染场景)

如果你的组件会因为其他原因重新渲染,或者需要更新数据后刷新表格,可以在componentDidUpdate钩子中处理DataTables的销毁和重新初始化:

componentDidUpdate(prevProps, prevState) {
  // 仅当posts数据发生变化时执行
  if (prevState.posts !== this.state.posts) {
    // 先销毁已有的DataTables实例,避免冲突
    const table = $('#earthquakes').DataTable();
    if (table) table.destroy();
    
    // 重新初始化表格
    $('#earthquakes').DataTable();
  }
}

额外的小修复:修正图片标签的属性错误

你在QuakeShow组件里的img标签用了url属性,这是不正确的,应该用src。另外,本地绝对路径在React项目里可能无法正常加载,建议把图片放在项目的public文件夹下,用相对路径:

// 假设图片放在public/resources/earthquake.png
<td><img src="/resources/earthquake.png" alt="Earthquake icon" /></td>

这样处理后,DataTables就会在有真实数据的情况下初始化,不会再显示错误的无数据提示了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:16:43