【发布时间】:2018-01-15 02:25:42
【问题描述】:
我正在尝试将 thead 和 tbody 标签添加到我的表中以做出反应。源数据是一个数组,其中第一个索引包含表头,其余为表体。
return (
<div>
{index == 1 && <tbody>}
<tr key={index}>
{tableData(false, row.value)}
</tr>
{index == pivot.data.table.length && </tbody>}
</div>
);
在上面的循环中,我在{index == pivot.data.table.length && </tbody>} 得到了意外的令牌
完整代码和沙盒如下:
import React, { Component } from "react";
import { render } from "react-dom";
import Pivot from "quick-pivot";
import { Table } from 'react-bootstrap';
class PivotTable extends Component {
constructor(props) {
super(props);
}
createTable() {
const dataArray = [
["name", "gender", "house", "age"],
["Jon", "m", "Stark", 14],
["Arya", "f", "Stark", 10],
["Cersei", "f", "Baratheon", 38],
["Tywin", "m", "Lannister", 67],
["Tyrion", "m", "Lannister", 34],
["Joffrey", "m", "Baratheon", 18],
["Bran", "m", "Stark", 8],
["Jaime", "m", "Lannister", 32],
["Sansa", "f", "Stark", 12]
];
const rowsToPivot = ["name"];
const colsToPivot = ["house", "gender"];
const aggregationDimension = "age";
const aggregator = "sum";
const pivot = new Pivot(
dataArray,
rowsToPivot,
colsToPivot,
aggregationDimension,
aggregator
);
console.log("pivot.data", pivot.data, "pivot.data.table", pivot.data.table);
const tableData = (heading, row) => {
return row.map(cell => {
if (heading) {
return (
<th>
{cell}
</th>
);
} else {
return (
<td>
{cell}
</td>
);
}
});
};
return pivot.data.table.map((row, index) => {
if (index == 0) {
return (
<thead>
<tr key={index}>
{tableData(true, row.value)}
</tr>
</thead>
);
} else {
return (
<div>
{index == 1 && <tbody>}
<tr key={index}>
{tableData(false, row.value)}
</tr>
{index == pivot.data.table.length && </tbody>}
</div>
);
}
});
}
render() {
return (
<table>
{this.createTable()}
</table>
);
}
}
render(<PivotTable />, document.getElementById("root"));
沙盒: https://codesandbox.io/s/vgDE6rOEM
我该如何解决这个问题?
我认为最简单的方法是创建一个单独的函数来再次调用数据,创建一个新数组并只创建标题。我这样做的问题是它可能会大大降低性能。
我可以在一个电话中完成这一切吗?或者解决这个问题的最佳方法是什么?
【问题讨论】:
-
意外的标记可能是
<- 你不能像在 React{...}中的 JavaScript 表达式中那样输出 HTML 元素 -
@chazsolo 我觉得这很奇怪,因为官方文档提到你可以这样做:facebook.github.io/react/docs/…你知道为什么这不起作用吗?
-
你说得对……我不确定我在读什么。忽略:)
-
对不起,我想问一下……为什么桌子里面有
<div>? -
@lumio 我添加了它,因为否则我会从反应中得到一个错误,如果我想渲染多个组件,它们应该始终被标签包围。我宁愿排除它们,但我不知道如何。
标签: javascript twitter-bootstrap reactjs meteor