当前位置: 首页 > 知识库问答 >
问题:

如何正确包装几个TD标记的JSXTransform?

何飞翰
2023-03-14

我有一个项目数组,我想做这样的东西:

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

但如果我这样做,我会得到一个JSXTTransformer错误:

相邻的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>);
})}

我试过这个。但是用

此处回答:未捕获错误:不变冲突: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标签!我尝试使用动态儿童指南,但JSXTransform不允许我这样做。


共有3个答案

张亦
2023-03-14

随着React 16的释放,出现了一种新的成分,称为Fragment。如果您希望返回元素/组件的集合,而不必将它们包装在封闭的元素中,则可以使用片段,如下所示:

import { Component, Fragment } from 'react';

class Foo extends Component {

  render() {
    return (
      <Fragment>
        <div>Hello</div
        <div>Stack</div>
        <div>Overflow</div>
      </Fragment>
    );
  }
}
陈瀚
2023-03-14

所以你有两对

<tr>
  {data.map(function(x, i){
    return [
      <td>{x[0]}</td>,
      <td>{x[1]}</td>
    ];
  })}
</tr>

不要忘记第一个

茅才
2023-03-14

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

相邻的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>);

为了让我正确地回答你的问题,你能提供一个JSFIDLE吗?我试着猜你想做什么,这里有一个JS的中间工作。

当使用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>

编辑:反应16

自React 16以来,您现在可以使用片段。

你现在会这样做吗

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

或者您可以使用

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

https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment

 类似资料:
  • 问题内容: 我有一个包含项的数组,我想做这样的事情: 但是,如果这样做,我会收到JSXTransformer错误: 相邻的XJS元素必须包装在一个封闭标签中 工作版本: 我尝试了这个。但是,使用封闭标签无法正常工作。 在这里回答: 未捕获的错误:始终违反:findComponentRoot(…,… $ 110):无法找到元素。这可能意味着DOM被意外地突变了 请告诉我如何正确包装一些TD标签! 我

  • 问题内容: 我发现新手很难将几个或几个JSON-LD标记合并在一起。你能告诉我我在做什么错吗? 当我在Google结构化数据测试工具中输入以下标记时,它仅显示架构类型的结果,同时也显示架构类型的结果。 问题答案: 要指定多个顶级项目,您可以使用三个选项: 数组 缺点:您必须为每个项目重复此操作。 多个要素 缺点:您必须为每个项目重复元素和。 但是通常最好只提供一个顶级项,并将其他项嵌套在适当的属性

  • 我试图在HTML的pre标签中包装文本,但它不起作用。我使用下面的CSS作为我的标签。 我从如何在pre标记中换行文本? 我已添加

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

  • 我在CDATA标记中有一些XML格式的文本。XSLT将此数据放在列表属性名称中 有人能帮我解决这个问题吗?

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