Ich schreibe einen Code in Reaktion, in dem ich die JSON-Daten in einer HTML-Tabelle anzeigen möchte. Ich möchte, dass dies dynamisch ist. dh unabhängig von der Art der json-Daten, die ich verwende, sollten sie im Tabellenformat gerendert werden.
Hier ist mein Code mit Beispieldaten.
const jsArray = [{"Model":"Mazda RX4","mpg":21,"cyl":6},{"Model":"Mazda RX4 Wag","mpg":21,"cyl":6},{"Model":"Datsun 710","mpg":22.8,"cyl":""},{"Model":"Hornet 4 Drive","mpg":21.4,"cyl":""},{"Model":"Hornet Sportabout","mpg":18.7,"cyl":8},{"Model":"Valiant","mpg":18.1,"cyl":6}];
{jsArray.length > 0 && (
<table>
<thead>
{jsArray.map((item, idx) =>
idx === 0? (
<th key={idx}>
{Object.values(item).forEach((val) => (
<td>{val}</td>
))}
</th>
): (
<tr key={idx}>
{Object.values(item).forEach((val) => (
<td>{val}</td>
))}
</tr>
)
)}
</thead>
</table>
)}
Wenn ich diesen Code ausführe, wird nichts gerendert. <tr key={idx}>{Object.values(item).forEach((val)=> (<td>{val}</td>))}</tr>Wenn ich durch ersetze null, sehe ich in meiner Ausgabe null in meinem Frontend gedruckt. Bitte lassen Sie mich wissen, wo ich falsch liege.
Lösung des Problems
Sie können es so machen:
const data = JSON.parse(jsArray);
const keys = Object.keys(data.length? data[0]: {});
return (
<div className="App">
{jsArray.length > 0 && (
<table>
<thead>
<tr>
{keys.map((item, idx) => (
<th key={idx}>{item}</th>
))}
</tr>
</thead>
<tbody>
{data.map((item, idx) => (
<tr key={idx}>
{keys.map((key, idx) => (
<td>{item[key]}</td>
))}
</tr>
))}
</tbody>
</table>
)}
</div>
);
Keine Kommentare:
Kommentar veröffentlichen