<div>不能显示为<p的后代>

2022-08-30 00:34:41

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

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

我是 和 的作者。但后者使用外部依赖关系(来自 react-tooltip)。这可能是一个外部依赖关系,但它让我尝试这里的论点,即它是“一些不受我控制的代码”。SomeComponentSomeOtherComponentReactTooltip

鉴于嵌套组件工作正常(似乎),我应该对此警告有多担心?无论如何,我该如何更改它(前提是我不想重新实现外部依赖项)?有没有一个更好的设计,我还没有意识到?

为了完整起见,下面是 的实现。它只是呈现 ,当悬停时:一个显示“某些工具提示消息”的工具提示:SomeOtherComponentthis.props.value

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

谢谢。


答案 1

如果在使用材质 UI https://material-ui.com/api/typography/ 时发生此错误,则可以通过更改元素的属性值轻松地将 更改为 a:<Typography><p><span>component<Typography>

<Typography component={'span'} variant={'body2'}>

根据排版文档:

组件 :用于根节点的组件。使用 DOM 元素或组件的字符串。默认情况下,它会将变体映射到良好的默认标题组件。

因此,排版选择作为合理的默认值,您可以更改它。可能会有副作用...为我工作。<p>


答案 2

根据警告消息,组件 ReactTooltip 呈现一个可能如下所示的 HTML:

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

根据本文档,标记只能包含内联元素。这意味着将标签放在其中应该是不合适的,因为标签是块元素。不正确的嵌套可能会导致诸如渲染额外标签之类的故障,这可能会影响您的javascript和css。<p></p><div></div>div

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