小能豆

<div> 不能作为 <p> 的后代出现

javascript

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

SomeComponent我是和的作者SomeOtherComponent。但后者使用外部依赖项(ReactTooltip来自react-tooltip)。这可能是外部依赖项,但这让我可以尝试这里的论点,即它是“一些我无法控制的代码”。

鉴于嵌套组件工作正常(表面上),我应该对此警告有多担心?无论如何,我该如何改变这一点(假设我不想重新实现外部依赖项)?是否还有更好的设计我还不知道?

为了完整起见,下面是 的实现SomeOtherComponent。它只是渲染this.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>
  }
}

谢谢。


阅读 46

收藏
2024-06-10

共1个答案

小能豆

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

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

根据排版文档:

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

因此,Typography 被选为<p>合理的默认值,您可以更改它。可能会有副作用…对我来说有用。

2024-06-10