ich die folgende Störung erhalte, wenn meine reagieren Komponente wird nach einem Klick Ereignis erneut gerendert:Reagieren js: Invariant Verletzung: processUpdates(), wenn Sie eine Tabelle mit einer unterschiedlichen Anzahl von untergeordneten Zeilen Rendering
Uncaught Error: Invariant Violation: processUpdates(): Unable to find child 2 of element. This probably means the DOM was unexpectedly mutated ...
Diese tritt nur auf, wenn meine Tabelle eine andere Anzahl von Zeilen als die zuvor gerenderte Version hat. Zum Beispiel:
/** @jsx React.DOM */
React = require('react');
var _ = require("underscore");
var testComp = React.createClass({
getInitialState: function() {
return {
collapsed: false
};
},
handleCollapseClick: function(){
this.setState({collapsed: !this.state.collapsed});
},
render: function() {
var rows = [
<tr onClick={this.handleCollapseClick}><th>Header 1</th><th>Header 2</th><th>Header 3</th></tr>
];
if(!this.state.collapsed){
rows.push(<tr><th>Row1 1</th><th>Row1 2</th><th>Row1 3</th></tr>);
}
rows.push(<tr><th>Footer 1</th><th>Footer 2</th><th>Footer 3</th></tr>);
return <div>
<table>
{rows}
</table>
</div>
}
});
module.exports = testComp
Wenn ich unterschiedliche Inhalte machen, aber mit der gleichen Anzahl von Zeilen, ich habe nicht den Fehler, so dass, wenn ich die if-Anweisung aktualisieren:
if(!this.state.collapsed){
rows.push(<tr><th>Row1 1</th><th>Row1 2</th><th>Row1 3</th></tr>);
}else{
rows.push(<tr><th>Row2 1</th><th>Row2 2</th><th>Row2 3</th></tr>);
}
.. . funktioniert alles.
Muss ich gezwungenermaßen reagieren, um die gesamte Komponente in diesem Fall anstatt nur der "geänderten" Elemente neu zu rendern?
Dies könnte, weil Sie nicht die Elemente innerhalb des Arrays einzigartige 'Schlüssel geben werden 's. Siehe http: //facebook.github.io/react/docs/multiple-components.html, dynamische Kinder. –
Sogar mit Schlüsseln hinzugefügt sehe ich das gleiche Ergebnis ... – koosa
Eigentlich bedeutet das Hinzufügen von Schlüsseln bedeutet, dass auch bei Verwendung der gleichen Anzahl von Elementen bekomme ich immer noch den obigen Fehler ... – koosa