Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未使用this.props-ReactJS在数据表中呈现数组数据_Javascript_Reactjs_Csv_Chart.js_Papaparse - Fatal编程技术网

Javascript 未使用this.props-ReactJS在数据表中呈现数组数据

Javascript 未使用this.props-ReactJS在数据表中呈现数组数据,javascript,reactjs,csv,chart.js,papaparse,Javascript,Reactjs,Csv,Chart.js,Papaparse,我有两种成分。其中一个组件使用Papa Parse处理CSV数据,另一个组件呈现数据表。我正在使用第一个组件解析数据,并使用this.props将数据发送到第二个组件 这里,我使用Jquery数据表在web中呈现CSV数据。问题是我无法使用this.props呈现数据表中的数据。 此问题已由@drew reese解决 也可以在数据表中将图形呈现为DefaultContentAPI选项吗?请参阅第二部分 这就是我要尝试的 第一部分: 我曾尝试在p标记中显示相同的数据,但不起作用。实际上,我无法将数

我有两种成分。其中一个组件使用Papa Parse处理CSV数据,另一个组件呈现数据表。我正在使用第一个组件解析数据,并使用this.props将数据发送到第二个组件

这里,我使用Jquery数据表在web中呈现CSV数据。问题是我无法使用this.props呈现数据表中的数据。 此问题已由@drew reese解决

也可以在数据表中将图形呈现为DefaultContentAPI选项吗?请参阅第二部分

这就是我要尝试的

第一部分:

我曾尝试在p标记中显示相同的数据,但不起作用。实际上,我无法将数据从一个组件传递到另一个组件。有什么想法吗?我必须使用任何异步或其他东西吗。或者有没有更好的方法来解析csv并显示在数据表中

是否可以在数据表中的一列内呈现图表?请参阅最后一列和defaultContent API部分


提前感谢。

我怀疑这是因为jquery在react之外运行,而您的子组件仅在挂载时设置表。当父级使用数据设置状态时,子级会看到prop更新并重新渲染{this.props.data}

,但不会更新其数据。如果将jquery逻辑重构为实用程序函数,并在componentDidMount中调用set数据表,在componentDidUpdate props update中调用update表,则可以利用组件生命周期函数来更新数据

这是一个如何更新数据表的示例

setDataTable = () => {
  this.$el = $(this.el);
  this.$el.DataTable({
    data: this.props.data,
    columns: [
      { title: "heading" },
      { title: "heading" },
      { title: "heading " },
      { title: "heading " },
      { title: " heading" },
    ]
  });
}

updateDataTable = () => {
  const table = $(this.el).DataTable();

  // logic to update table with updated data
  table.clear();
  table.rows.add(this.props.data);
  table.draw();
};

componentDidMount() {
  console.log(this.el);
  this.setDataTable();
}

componentDidUpdate(prevProps) {
  console.log(this.el);
  if (prevProps.data !== this.props.data) {
    this.updateDataTable();
  }
}

问题:为什么不使用更具反应性的方式呈现数据?类似于?

更改挂钩是否会更改componentDidMount而不是componentWillMount?我将componentWillMount更改为componentDidMount。数据表仍然为空。您是说this.props.data未在元素中呈现吗?或者是,而表没有按预期呈现jquery数据?this.props.data是数据表的数据。我通过将数据放在数据表和p标记中进行检查。这两种方法实际上都不起作用。太棒了,这是我怀疑需要补充的。取消隐藏我的答案。使用此方法时,数据表中没有数据。我得到一个错误,setDataTable未定义。因此,我尝试在构造函数中设置this.setDataTable=this.setDataTable.bindthis。但数据表中仍然没有数据。此外,数据表还会创建一条错误消息,即无法重新初始化该表。早些时候,我能够使用componentDidUpdate呈现该表。@Musthafa啊,它是一个实例函数,因此将作为更新后的this.setDataTable进行访问。它也是一个arrow函数,所以不需要在构造函数中将它绑定到它。关于初始化或重新初始化DataTable,我不确定,但可以尝试一些关于更新数据的快速研究,以改进我的答案。我怀疑在更新时不需要列。是的,这是在react组件中呈现数据表的一种很好的方法。我们可以很容易地用最新的数据重新呈现表格。到目前为止,重新初始化没有问题。我会检查更新数据。我还试图在其中一列中呈现一个图形。可能吗?我得到一个错误[object]。无论如何,谢谢你的回答更新。
import { Line } from 'react-chartjs-2';
const $ = require('jquery')
$.DataTable = require('datatables.net');
class Charts extends React.Component {

    componentDidMount() {
        console.log(this.el);
        this.$el = $(this.el)
        this.$el.DataTable({
            data: this.props.data,
            columns: [
                { title: "heading" },
                { title: "heading" },
                { title: "heading " },
                { title: "heading " },
                { title: " heading",\
                  defaultContent: <Line /> #chartjs graph
                 },
            ]
        })
    }
    componentWillUnmount() {
    }
    render() {
        return (
            <div>
                <table className="display" width="100%" ref = {el => this.el = el }></table>
                <p>{this.props.data}</p>
            </div>
        );
    }
}

//ChartJS line graph
<Line
    data={data}
    options={options} />
setDataTable = () => {
  this.$el = $(this.el);
  this.$el.DataTable({
    data: this.props.data,
    columns: [
      { title: "heading" },
      { title: "heading" },
      { title: "heading " },
      { title: "heading " },
      { title: " heading" },
    ]
  });
}

updateDataTable = () => {
  const table = $(this.el).DataTable();

  // logic to update table with updated data
  table.clear();
  table.rows.add(this.props.data);
  table.draw();
};

componentDidMount() {
  console.log(this.el);
  this.setDataTable();
}

componentDidUpdate(prevProps) {
  console.log(this.el);
  if (prevProps.data !== this.props.data) {
    this.updateDataTable();
  }
}