我看到了这个。它在抱怨什么并不神秘:

Warning: validateDOMnesting(...): <div> cannot appear as a descendant of <p>. See ... SomeComponent > p > ... > SomeOtherComponent > ReactTooltip > div.

我是SomeComponent和SomeOtherComponent的作者。但后者使用了外部依赖项(来自react-tooltip的ReactTooltip)。这可能并不一定是一个外部依赖,但它让我尝试在这里讨论它是“一些超出我控制的代码”。

鉴于嵌套组件工作正常(看起来),我应该对这个警告有多担心呢?无论如何,我该如何改变它(如果我不想重新实现一个外部依赖)?有没有我还不知道的更好的设计?

为了完整起见,下面是SomeOtherComponent的实现。它只是渲染this。props。值,当鼠标悬停时:显示“一些工具提示消息”:

class SomeOtherComponent extends React.Component {
  constructor(props) {
    super(props)
  }

  render() {
    const {value, ...rest} = this.props;
    return <span className="some-other-component">
      <a href="#" data-tip="Some tooltip message" {...rest}>{value}</a>
      <ReactTooltip />
    </span>
  }
}

谢谢你!


当前回答

如果你正在使用ReactTooltip,为了让警告消失,你现在可以添加一个包装器道具,其值为span,如下所示:

<ReactTooltip wrapper="span" />

由于span是一个内联元素,它应该不再报错。

其他回答

基于警告消息,组件ReactTooltip呈现一个HTML,看起来像这样:

<p>
   <div>...</div>
</p>

根据本文档,<p></p>标签只能包含内联元素。这意味着在其中放置<div></div>标签是不合适的,因为div标签是一个块元素。不恰当的嵌套可能会导致一些小故障,比如呈现额外的标签,这会影响你的javascript和css。

如果您希望消除此警告,您可能需要自定义ReactTooltip组件,或者等待创建者修复此警告。

我有同样的问题与反应引导和亚历克斯C的解决方案,我发现我使用<div>在<卡。文本>,有点<p>

<Card.Text>
     <div>{name}</div>
     <div>{address}</div>
     <div>{size}</div>
</Card.Text>

如果你不能解决问题,就用底部方法 你会有这个问题,因为你在文本标签中打开网格标签或div,它可能是假的。 例如,我写的部分代码有问题。看看它:

       <Typography>
         text
            <Grid>

            </Grid>
        </Typography>

小心我在版式标签中打开网格标签。因此,如果我们在typography标签中使用Open Grid标签,则为假。 据我所知,当我们在排印标签中打开时,我们偏离了MUI标准。 所以为了最好的方式,你可以使用以下代码:

  <Grid>
       <Typography>
             text
       </Typography>
   </Grid>

如果你使用这个代码,你不会有任何问题。 因此,如果你再次有问题 你必须检查组件和 查看在哪个组件中没有选择正确的模式。 你应该检查:

跨度字体h1 h2 h3 h4 h5 h6 p

希望我能帮到你。

在App.js的渲染过程中有一个问题。 不要使用<div>…</div>渲染只需使用<>…</>。

我也有类似的问题,把组件包装成“div”而不是“p”,错误就消失了。