📌  相关文章
📜  提供给组件的 anchorEl 属性无效. (1)

📅  最后修改于: 2023-12-03 14:54:43.838000             🧑  作者: Mango

错误信息

提供给组件的 anchorEl 属性无效.

错误原因

这个错误通常是在使用Material UI的Popover组件时发生的。Popover组件需要一个anchorEl属性来指定它应该挂载在哪个元素上方。如果这个属性没有正确指定成一个HTML元素或者DOM节点,那么程序就会抛出这个错误。

解决方法
1. 确保anchorEl指向了正确的元素或DOM节点

Popover组件中,anchorEl属性应该指向一个HTML元素或者DOM节点。如果你使用React,你可以使用ref来引用它。

import React from 'react';
import Popover from '@material-ui/core/Popover';

function MyComponent() {
  const anchorRef = React.useRef();

  return (
    <>
      <button ref={anchorRef}>Click me</button>
      <Popover anchorEl={anchorRef.current}>
        <div>Popover content</div>
      </Popover>
    </>
  );
}
2. 确保anchorEl不为null

如果anchorElnull,那么Popover组件就不会渲染。你可以使用一个条件语句来避免这种情况。

import React from 'react';
import Popover from '@material-ui/core/Popover';

function MyComponent() {
  const [anchorEl, setAnchorEl] = React.useState(null);

  return (
    <>
      <button onClick={(event) => setAnchorEl(event.currentTarget)}>Click me</button>
      {anchorEl && (
        <Popover anchorEl={anchorEl} onClose={() => setAnchorEl(null)}>
          <div>Popover content</div>
        </Popover>
      )}
    </>
  );
}
3. 确保Popover组件在渲染时anchorEl已经存在

如果Popover组件在渲染时anchorEl属性是undefined或者null,那么程序就会抛出这个错误。你可以使用一个条件语句来避免这种情况。

import React from 'react';
import Popover from '@material-ui/core/Popover';

function MyComponent() {
  const [anchorEl, setAnchorEl] = React.useState(null);

  return (
    <>
      <button onClick={(event) => setAnchorEl(event.currentTarget)}>Click me</button>
      {anchorEl && (
        <Popover anchorEl={anchorEl} onClose={() => setAnchorEl(null)}>
          <div>Popover content</div>
        </Popover>
      )}
      {!anchorEl && <span>Click the button to open the popover.</span>}
    </>
  );
}

以上就是解决提供给组件的 anchorEl 属性无效.错误的三种常见方法。如果你遇到了其它问题,可以查看错误信息的上下文来找到具体的原因。