我收到以下错误的表时,当我反应的单击事件后组件进行重新渲染:阵营JS:不变违规:processUpdates()呈现了不同数量的子行
Uncaught Error: Invariant Violation: processUpdates(): Unable to find child 2 of element. This probably means the DOM was unexpectedly mutated ...
这只有当我的表的行数不同于先前的渲染版本时才会发生。例如:
/** @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
如果我呈现不同的内容,但具有相同的行数,我没有得到的错误,所以如果我更新if语句:
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>);
}
..一切正常。
在这种情况下,我是否需要强制反应来重新渲染整个组件,而不是仅仅是“已更改”元素?
这可能是因为你没有给数组唯一'键内的元素单曲。请参阅http://facebook.github。io/react/docs/multiple-components.html,动态子项。 – 2014-11-01 13:48:47
即使添加了键我也看到了相同的结果... – koosa 2014-11-01 13:55:10
实际上,添加键意味着即使使用相同数量的元素时,我仍然会得到上述错误... – koosa 2014-11-01 13:59:28