【问题标题】:Generating HTML Tables in React JSX在 React JSX 中生成 HTML 表格
【发布时间】:2018-07-19 09:52:19
【问题描述】:

我正在从 JSX 中生成一个 HTML 表。美丽的。除了必须有条件地生成表的某些部分。所以,我使用三元表达式,并生成<td>'s。

但是 JSX 只允许一次生成一个元素,所以,我最终将<span> 放在了条件部分周围。

但 React、Chrome 或 HTML 不允许在 <tbody>s 中使用 span。啊!这就是 Chrome 向我扔的东西: Warning: validateDOMNesting(...): <span> cannot appear as a child of <tbody>.

那么男人该怎么办?

这里有一些代码。也许有一个更简单的方法来做到这一点?

{card.vars.map(section => {
    return (
        <tbody className="bodySection">
            <td rowSpan={section.vars.length} className="side-title">{section.varTypes}</td>
            {section.vars.map((item, index) => {
                return (
                    <span key={index}>
                        <td className="fieldname src-data">{item.varName}</td>
                        <td className="fieldvalue src-data">{item.varVal ? 'Yes' : 'No'}</td>
                        {!('transform' in item) ? (
                            <span>
                                <td className="fieldname dest-data">{item.varName}</td>
                                <td className="fieldvalue dest-data">
                                    <input type="text" onChange={this.onValChange.bind(this)} value={item.varVal} />
                                </td>
                            </span>
                        ) : ''}
                    </span>
                );
            })}
        </tbody>
    );
})}

【问题讨论】:

    标签: reactjs html-table jsx


    【解决方案1】:

    如果您使用的是 React 16,则可以返回一个元素数组,每个元素都有一个 key 属性。

    const App = () => [
      <p key="1">React 16 can return multiple elements ❤️</p>,
      <p key="2">React 16 can return multiple elements ❤️</p>,
      <p key="3">React 16 can return multiple elements ❤️</p>,
    ];
    

    或者如果你使用的是 React 16.2,你可以使用新的 Fragment 语法

    const App = () => (
      <React.Fragment>
        <p>React 16 can return multiple elements ❤️</p>
        <p>React 16 can return multiple elements ❤️</p>
        <p>React 16 can return multiple elements ❤️</p>
      </React.Fragment>
    );
    

    注意。来自this article about returning multiple elements的示例

    【讨论】:

    • 谢谢@Tony,我听说可以做到这一点,但是没有语法,当我尝试它时它不起作用。 (另外,不要以为我不喜欢情人节这么近的表情符号。> P)原来我使用的是16.2。耶!
    • 所以让我再等 2 分钟,然后我才能给你绿色复选标记。但我尝试了 Fragment,它似乎有效。所以谢谢@Tony!
    猜你喜欢
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2023-03-09
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    相关资源
    最近更新 更多