提问人:Paul 提问时间:11/11/2023 最后编辑:SeanPaul 更新时间:11/15/2023 访问量:60
<tbody>不能显示为 <div> 的子级,<div> 不能显示为 <table 的子级>
<tbody> cannot appear as a child of <div> and <div> cannot appear as a child of <table>
问:
请看一下我的表格的示意图结构。为了便于阅读,我删除了所有不必要的内容。正如你所看到的,有一个标题,有一个正文。只有正文包装在 ScrollArea (https://www.radix-ui.com/primitives/docs/components/scroll-area) 中,因为我希望用户能够仅滚动正文而不是整个表格
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<ScrollArea.Root>
<ScrollArea.Viewport>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</ScrollArea.Viewport>
<ScrollArea.Scrollbar/>
</ScrollArea.Root>
</table>
因此,当我转到包含此表的页面时,我在控制台中收到两个警告:
警告:validateDOMNesting(...):div 不能显示为表的子项。
警告:validateDOMNesting(...):tbody 不能显示为 分区
如果我从表中删除 ScrollArea,则警告会消失。但是 ScrollArea 对我来说非常重要,因为它可以浏览长表。
告诉我如何摆脱这些警告?
答:
0赞
Nick Friesen
11/11/2023
#1
您可能希望将表分解为较小的组件,然后在适用时使用标记包装这些较小的组件。<ScrollArea>
您希望做的是将代码分成两个不同的文件:
(表.js)
import React from 'react';
import * as ScrollArea from '@radix-ui/react-scroll-area';
import './styles.css';
import scrollArea_tbody from '../components/scrollArea_tbody';
const table = () => (
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<scrollArea_tbody />
</table>
);
export default table;
(scrollArea_tbody.js)
import React from 'react';
import * as ScrollArea from '@radix-ui/react-scroll-area';
import './styles.css';
const scrollArea_tbody = () => (
<ScrollArea.Root>
<ScrollArea.Viewport>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</ScrollArea.Viewport>
<ScrollArea.Scrollbar/>
</ScrollArea.Root>
);
export default ScrollAreaDemo;
要构建一个组件,我会遵循 React 文档;具体来说,从这里开始将是一个很好的选择:https://react.dev/learn/your-first-component
评论
0赞
Paul
11/11/2023
感谢您关注我的问题。是的,你的方法很有趣,但我不太明白如何在代码中做到这一点。如果您能以代码形式提供示例,我将不胜感激
0赞
Nick Friesen
11/13/2023
我添加了一个链接,指向学习如何在 React 中实现组件的最简单方法。如果你仍然感到有点迷茫,我推荐一个非凡的课程在这里:codewithmosh.com/p/the-ultimate-react-native-course
0赞
Paul
11/13/2023
对不起,但我仍然不明白这如何适用于我的问题。正如你所看到的,我只是包裹身体,而不是整个桌子。你能用我的代码举个例子吗?
0赞
Nick Friesen
11/15/2023
我编辑了答案,通过将代码分解为两个单独的组件来更好地表示您需要执行的操作。如果您仍然感到困惑,请告诉我。
上一个:相对复杂的表单元格
评论