Ich habe eine ReactJS HTML-Tabellenkomponente, und ich aktualisiere seinen Inhalt (Zellwerte) mit der setState
-Methode. Hier ist die grundlegende Code:Entfernen von Zeile aus Tabelle führt zu TypeError
var Cell = React.createClass({
render: function() {
return (<td>{this.props.cellValue}</td>);
}
});
var Row = React.createClass({
render: function() {
return (<tr>{this.props.row}</tr>);
}
});
var Table = React.createClass({
getInitialState: function() {
return {
data: this.props.data
};
},
render: function() {
return (
<table>
{
this.state.data.map(function(row) {
var r = row.map(function(cell) {
return <Cell cellValue={cell}/>;
});
return (<Row row={r}/>);
})
}
</table>
);
}});
Sie es wie folgt verwenden würde:
var initialData = [[1,2,3],[4,5,6],[7,8,9]];
var table = React.renderComponent(
<Table data={initialData} />,
document.getElementById('table')
);
Dies wird die meiste Zeit arbeiten. Ich kann die Daten ändern, indem Sie diese (irgendwo in einer Funktion oder was auch immer):
var newData = [[1,2,3],[4,5,6],[7,8,9],[10,11,12]];
table.setState({data : newData});
Wie Sie sehen können, es fügt eine Zeile am Ende der Tabelle. Wenn ich jedoch die Ausgangsdaten nach diesem Update oder in irgendeiner Weise zu setzen versuchen verkürzen die Anzahl der Zeilen, die von data
auf einen kleineren Array-Einstellung (zB [[1, 2, 3], [4, 5, 6]]
die die letzte Zeile entfernen soll):
table.setState({data : initialData});
I Erhalten Sie diesen Fehler:
TypeError: updatedChildren[j] is undefined updatedChildren[j].parentNode.removeChild(updatedChildren[j]);
Woher kommt es?
+1 - das ist eine sehr gute Antwort, und etwas, das in Zukunft wahrscheinlich andere beißen wird. Danke, dass du dir die Zeit genommen hast, die Frage und Antwort hier zu beantworten :-) –
Danke. Ich versuche, zu diesem Zweck eine explizite Warnung hinzuzufügen, um den Leuten die Verwirrung in der Zukunft zu ersparen. –