【发布时间】:2020-02-17 22:46:40
【问题描述】:
我有一个对话框和一个 ListItem,当您单击它时,它会显示一个弹出框进入编辑模式。这是在使用 Modal 的旧版本 MUI 中工作的,但是自从使用最新版本后不起作用,我正在尝试使用 Popover。我试图在 CodeSandox 上做一个简单的例子,但这很有效。发生的情况是 Popover 始终位于页面的左上角,而不是 ListItem。
我已将我的代码简化为对话框中的一个简单按钮和弹出框,但仍然遇到同样的问题,并且对接下来要尝试的内容一无所知。我在控制台中得到的错误是
[Warning] Material-UI: the `anchorEl` prop provided to the component is invalid.
The anchor element should be part of the document layout.
Make sure the element is present in the document or that it's not display none.
单击该项目时,我会像示例中一样执行 event.currentTarget,这就是 console.log 的样子。
[Log] <button class="MuiButtonBase-root MuiButton-root MuiButton-text" tabindex="0" type="button"> (main.chunk.js, line 26437)
<span class="MuiButton-label">Click Me</span>
<span class="MuiTouchRipple-root">
<span class="MuiTouchRipple-ripple MuiTouchRipple-rippleVisible" style="width: 117.2006825918689px; height: 117.2006825918689px; top: -34.60034129593445px; left: -25.60034129593445px;">
<span class="MuiTouchRipple-child MuiTouchRipple-childLeaving"></span>
</span>
</span>
</button>
我什至尝试在对话框中执行 disablePortal,但没有解决它。我还尝试使用 refs 修复了 anchorEl 警告,但仍然相对于页面而不是元素显示。有什么想法吗?
【问题讨论】:
-
我的猜测是,当您渲染
Popover时,您的代码中的某些内容会导致按钮重新安装,因此触发Popover的 DOM 元素已被替换为新元素anchorEl不再有效,但没有看到你的代码就很难确定。 -
这就是问题所在 -
ListItem在更改状态以显示Popover时重新渲染。一旦我通过Popover中的更改值导致ListItem和Popover完全重新渲染。经过一些重组的乐趣,现在一切都很好。感谢您的提示。
标签: reactjs material-ui