未捕获错误:不变违例:findComponentRoot(…,… $ 110):无法find元素。 这可能意味着DOM意外地发生了变化

我在做什么错误的嵌套周期在React? 我在Googlesearch了信息,但没有find合适的信息。 你能帮我find,我明白错了吗?

从图中可以看出,我有一个variables的数据。 它工作正常。 但是当我添加一个值不是从这个<tr> ,错误出现!

  var TableBalls80 = React.createClass({ render:function(){ var rows = this.props.rows; var columnId = 0, trKey = 0, divKey = 0, td1stKey = 0; var td2ndKey = 100; return( <table className='table table-bordered bg-success'> <thead> <tr className='danger'> {rows[0].row.map(function (element){ columnId++; return ( <th colSpan="2" key={columnId}>{columnId}</th>); })} </tr> </thead> <tbody> {rows.map(function (rowElement){ return (<tr key={trKey++}> {rowElement.row.map(function(ball){ console.log('trKey:'+trKey+' td1stKey'+td1stKey+' ball.value:'+ball.value+' td2ndKey:'+td2ndKey+' ball.count:'+ball.count); return(<div key={divKey++}> <td className='info' key={td1stKey++}>{ball.value}</td><td key={td2ndKey++}>{ball.count}</td> </div>); })} </tr>); })} </tbody> </table>); } }); 

错误(取决于从另一个<tr>添加的项目):

未捕获错误:不变违例:findComponentRoot(…,.0.1.1.0.2.0.0.1。$ 0. $ 9. $ 109):>无法find元素。 这可能意味着DOM出乎意料地发生了变化(例如,通过>浏览器),通常是因为忘记了使用表时的时间,……。

所以问题是你正在创build一个像这样的虚拟DOM结构:

 <tbody> <tr> <div> <td>...</td> <td>...</td> </div> </tr> </tbody> 

因为<div/>不是<tr>的有效子<tr>所以浏览器实际上创build了代表这个的DOM:

 <div> </div> <table> <tbody> <tr> <td>...</td> <td>...</td> </tr> </tbody> </table> 

小提琴

当反应进行更新时,它正在查看<tr>并想知道<div>去向。 相反,它find一个<td>所以它会抛出一个错误。

我得到了上面提到的错误,试图做一个testing:

 component = React.addons.TestUtils.renderIntoDocument(<MyTableRow />) React.findDOMNode(component) 

我的修补程序是在渲染之前包装它:

 component = React.addons.TestUtils.renderIntoDocument(<table><MyTableRow /></table>) table = React.findDOMNode(component) row = jQuery(table).find("tr")[0] 

有时也会发生React从两个不同位置(例如,从需求和HTML)加载的情况,

我有类似的问题,原因是我在React.js组件内使用<form>标签,并将其呈现给已经打开了<form>的页面位置。 表单不能嵌套。 所以你可以得到这个错误,即使组件内的HTML似乎是有效的。

这个错误是因为某处有HTML标记是无效的。

在我的情况下,我笨拙地有一个button标签里面的React生成一个表单标签,直到这个错误开始出现才意识到。 检查你的标记是否允许嵌套错误。

我有这个相同的问题,原来是DOM中的两个元素相同的ID(无意中)。

在我的情况下,问题是与button的types。 如果在<button>使用type="button" ,则ReactDOM会丢失。

我删除了type="button"并在我的onClick处理函数中添加了一个event.preventDefault() ,它对我很有帮助。