javascript - 使用不同的子元素数量重新渲染后,React js 崩溃

标签 javascript html reactjs

在react.js中,我需要用一个或两个“td”渲染“tr”的组件,具体取决于其属性。这是示例:

  var Item = React.createClass({

    content: function() {
       if(this.props.n==1) {
         return [<td calSpan={2}> Colspan</td>]
       }

       if(this.props.n==2) {
         return [<td> Td-1</td>, <td> Td-2</td>]
       }
    },

    render: function() {
            return (<tr> {this.content()}</tr>);
    }
    });

该组件一次渲染效果良好。更改属性后,React js 尝试重新渲染并崩溃并出现错误(Uncaught TypeError: Cannot read property 'parentNode' of undefined react.js:1079 )(在 Chrome 中)。但在 jsfiddle 中它工作得很好。这是示例:http://jsfiddle.net/dbazylev/x5p3C/9/ (单击表格进行重新渲染)。如果您从 jsfiddle 复制代码并在浏览器中执行它,代码将会崩溃。

我找到了一些解决方法。替换

 return [<td calSpan={2}> Colspan</td>]

  return [<td calSpan={2}> Colspan</td>, <td></td>]

它不是有效的 html,但它可以工作。为什么会出现这个错误?如何以另一种(更好的)方式解决它?

最佳答案

这是由 tr 元素中的多余空格引起的;改变

<tr> {this.content()}</tr>

<tr>{this.content()}</tr>

React 将空格渲染为 span 元素,但由于 tr 元素只能包含 td 元素,浏览器将它们粘贴到表格之外:

Document Inspector Screenshot

关于javascript - 使用不同的子元素数量重新渲染后,React js 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24591872/

相关文章:

javascript - Xul - javascript 选项卡和 url

javascript - 一种在另一个 div 打开时隐藏一个 div 的方法

html - IE11 flexbox 最大宽度和边距 :auto;

javascript - react -chartjs-2 : Pie Chart tooltip percentage

javascript - 如果 React 中的变量 == 某物,如何将类分配给元素?

javascript - 当调用设定的间隔函数时触发倒计时

javascript - 如何使用 Jade 和 Node.js 迭代 JSON 数组

javascript - 单击即可取消隐藏一个文本框

html - 复选框不显示在 IE 中(仅)

javascript - 将现有元素注入(inject) React