当前位置: 首页 > 面试题库 >

如何正确包装JSXTransformer的几个TD标签?

温翔宇
2023-03-14
问题内容

我有一个包含项的数组,我想做这样的事情:

<tr>
(until have items in array
<td></td><td></td>)
</tr>

但是,如果这样做,我会收到JSXTransformer错误:

相邻的XJS元素必须包装在一个封闭标签中

工作版本:

{rows.map(function (rowElement){
    return (<tr key={trKey++}>
        <td className='info' key={td1stKey++}>{rowElement.row[0].value}</td><td key={td2ndKey++}>{rowElement.row[0].count}</td>
        <td className='info' key={td1stKey++}>{rowElement.row[1].value}</td><td key={td2ndKey++}>{rowElement.row[1].count}</td>
        <td className='info' key={td1stKey++}>{rowElement.row[2].value}</td><td key={td2ndKey++}>{rowElement.row[2].count}</td>
        <td className='info' key={td1stKey++}>{rowElement.row[3].value}</td><td key={td2ndKey++}>{rowElement.row[3].count}</td>
        <td className='info' key={td1stKey++}>{rowElement.row[4].value}</td><td key={td2ndKey++}>{rowElement.row[4].count}</td>
                 .......
        </tr>);
})}

我尝试了这个。但是,使用<div>封闭标签无法正常工作。

在这里回答: 未捕获的错误:始终违反:findComponentRoot(…,… $
110):无法找到元素。这可能意味着DOM被意外地突变了

<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>

请告诉我如何正确包装一些TD标签! 我尝试使用指南Dynamic
Children
,但是JSXTransformer不允许我这样做。


问题答案:

当您返回多个没有包装元素的元素时,通常会发生以下错误

相邻的XJS元素必须包装在一个封闭标签中

喜欢

return (
    <li></li>
    <li></li>
);

这是行不通的,因为您实际上是在返回两个结果,您只需要返回一个DOM节点(有或没有子节点),例如

return (
    <ul>
        <li></li>
        <li></li>
    </ul>
);

// or

return (<ul>
    {items.map(function (item) {
        return [<li></li>, <li></li>];
    })}
</ul>);

为了让我正确回答您的问题,请您提供JSFiddle吗?我试图猜测您正在尝试做什么,并且它的JSFiddle起作用了。

当使用div作为包装器时,它实际上从未渲染到DOM(不确定原因)。

<tr data-reactid=".0.0.$1">
    <td class="info" data-reactid=".0.0.$1.$0.0">1</td>
    <td data-reactid=".0.0.$1.$0.1">2</td>
    <td class="info" data-reactid=".0.0.$1.$1.0">1</td>
    <td data-reactid=".0.0.$1.$1.1">2</td>
    <td class="info" data-reactid=".0.0.$1.$2.0">1</td>
    <td data-reactid=".0.0.$1.$2.1">2</td>
    <td class="info" data-reactid=".0.0.$1.$3.0">1</td>
    <td data-reactid=".0.0.$1.$3.1">2</td>
</tr>

编辑:React 16+

从React 16开始,您现在可以使用片段。

你现在就这样做

return <>
    <li></li>
    <li></li>
<>;

或者,您可以使用<React.Fragment>,它<>是HTML片段的简写,它基本上只是充当容器的临时父元素,一旦将其附加到文档中就不再存在。

https://reactjs.org/docs/fragments.html

https://developer.mozilla.org/zh-
CN/docs/Web/API/DocumentFragment



 类似资料:
  • 我有一个项目数组,我想做这样的东西: 但如果我这样做,我会得到一个JSXTTransformer错误: 相邻的XJS元素必须包装在一个封闭标签中 工作版本: 我试过这个。但是用

  • 问题内容: 其中哪一个是正确的? 问题答案: 工作正常,并正确关闭标签。最好为视障人士添加属性。

  • 问题内容: 我现在正在开发应用程序,并进行全局切换。我想包装起来以方便使用。 然后,我在Firefox控制台中得到此结果。 如果我想使用被呼叫的行号登录该怎么办? 问题答案: 这是一个古老的问题,提供的所有答案都太过分了,存在跨浏览器的重大问题,并且没有提供任何超级有用的东西。该解决方案可在每种浏览器中使用,并完全按需报告所有控制台数据。无需黑客,只需一行代码即可签出codepen。 像这样创建开

  • 最近,我发现自己不得不在没有互联网连接的机器上安装python项目的所有依赖项(20)。我用了获取所有文件并手动传输。直到现在,我才完全理解pip的天才,以及它是如何独立计算依赖关系树并以正确的顺序安装每个包的。例如,包依赖于包,而包本身依赖于包等等。 我想要一种使用命令控制台或python本身在机器上自动安装所有这些依赖项的方法,因此我转向StackOverflow并找到了以下解决方案:如何在c

  • 问题内容: 我需要能够构建go应用程序的不同版本;“调试”版本和普通版本。 这很容易做到;我只是有一个const DEBUG,它控制应用程序的行为,但是每次我需要在构建类型之间进行交换时,都必须编辑配置文件,这很烦人。 我正在阅读有关go build(http://golang.org/pkg/go/build/)和标签的信息,我想也许我可以这样做: config.go: config.debug

  • 我有一个网络服务,可以返回学生和注册班级的详细信息。 该类的DTO如下所示: