javascript - 在没有 svg 的 React 中使用 D3 来处理表格行无法渲染
问题描述
我正在寻找一个当前工作的 d3 表,并将该表实现为一个反应组件。几乎所有的 D3 示例都使用 svg,而我没有使用这个标签。
我能够将 JSON 数据输出到控制台,但它没有附加行。
这是我原来的 D3.html 页面。
var column_names = ["Select","Deploy ID", "Requestor", "Market", "Env","Group","Deploy Date", "Approver", "Completed Date", "CRQ", "Job Status"];
// draw the table
d3.select("body").append("div")
.attr("id", "container")
d3.select("#container").append("div")
.attr("id", "FilterableTable");
var table = d3.select("#FilterableTable").append("table");
table.append("thead").append("tr");
var headers = table.select("tr").selectAll("th")
.data(column_names)
.enter()
.append("th")
.text(function(d) { return d; });
var filterButton = d3.select("#filterButton");
var rows;
d3.json("data.json", function(data) { // loading data from server
// draw table body with rows
table.append("tbody")
// data bind
rows = table.select("tbody").selectAll("tr")
.data(data, function(d){ return d.deploy_id; });
// enter the rows
rows.enter()
.append("tr")
.append("td") .append("input") .attr("type", "checkbox")
// enter td's in each row
row_entries = rows.selectAll("td")
.data(function(d) {
var arr = [];
for (var k in d) {
if (d.hasOwnProperty(k)) {
arr.push(d[k]);
}
}
return [arr[0],arr[0],arr[11],arr[9],arr[7],arr[5],arr[4],arr[1],arr[2],arr[3],arr[8]];
})
.enter()
.append("td")
row_entries.text(function(d) { return d; })
});
这是我对 D3 的了解和反应,我已经更改了 d3.json 方法,并且我可以通过将 data.json 保存在 /public 文件夹中来获取要记录的 data.json 值,但是我无法使用 data.json 中的值构建行
import React, { Component} from 'react';
import * as d3 from "d3";
class ViewDeploys extends Component {
constructor(props) {
super(props);
}
componentDidMount() {
this.drawTable();
}
drawTable() {
var column_names = ["Select","Deploy ID", "Requestor", "Market", "Env","Group","Deploy Date", "Approver", "Completed Date", "CRQ", "Job Status"];
// draw the table
d3.select("body").append("div")
.attr("id", "container")
d3.select("#container").append("div")
.attr("id", "FilterableTable");
var table = d3.select("#FilterableTable").append("table");
table.append("thead").append("tr");
var headers = table.select("tr").selectAll("th")
.data(column_names)
.enter()
.append("th")
.text(function(d) { return d; });
var filterButton = d3.select("#filterButton");
var rows;
// d3.json("/data.json", function(data) { // loading data from server
d3.json("/data.json").then((data) => {
// draw table body with rows
table.append("tbody")
// data bind
rows = table.select("tbody").selectAll("tr")
.data(data, function(d){ return d.deploy_id; });
// enter the rows
rows.enter()
.append("tr")
.append("td") .append("input") .attr("type", "checkbox")
// enter td's in each row
var row_entries = rows.selectAll("td")
.data(function(d) {
var arr = [];
for (var k in d) {
if (d.hasOwnProperty(k)) {
arr.push(d[k]);
}
}
return [arr[0],arr[0],arr[11],arr[9],arr[7],arr[5],arr[4],arr[1],arr[2],arr[3],arr[8]];
})
.enter()
.append("td")
row_entries.text(function(d) { return d; })
});
}
render() {
const id = '1';
return (
<section className="viewDeploysContainer">
<svg id={id} />
</section>
);
}
}
export default ViewDeploys;
解决方案
您试图在没有实际反应渲染的情况下绘制表格,这是错误的,反应将调用渲染方法并且您的表格将消失。我建议使用已经与 d3 集成反应的任何解决方案,这里有一些示例库: https ://github.com/nteract/semiotic http://recharts.org/en-US/guide/getting-started
推荐阅读
- c# - 当使用嵌套的 LambdaExpressions 编译 LambdaExpression 时,它们也会编译吗?
- terraform - 尝试使用堆栈输出列表作为模块输出
- javascript - 在跨度之间插入字符串变量
- css - Webpack(带有插件)是否可以缩小我的 CSS 文件,将其放在我的 dist 文件夹中,并将标签添加到 index.html
- javers - 有没有办法避免使用 Mongo 存储库在应用程序启动时创建索引?
- python - 如何检查大数据集Python中最大值的日期和时间
- python - 为什么我的 geopy 循环总是以 Killed: 9 结尾?
- java - 您可以从 CPD 检查中排除源文件吗?
- arrays - Swift 有内置的 isWord 函数吗?
- javascript - 使用 React 按下回车键时单击链接