Ben*_*enM 8 reactjs popper.js react-popper
我在 React 中构建了一个自定义树视图,每个项目都包含一个使用 Popper 定位的下拉列表。由于子元素在渲染时不可见,因此 Popper 未正确定位下拉列表,例如:
当树在安装时打开(即子级可见)时,定位是正确的:
树中的每个级别都通过一个CategoryNavItem组件呈现,其本质上如下所示:
<div className={ className.join(' ') }>
<div className={ `collection-nav_item-link depth${depth}` } style={{ paddingLeft: `${paddingLeft}px`}}>
<Link to={ linkTo } onClick={() => { setIsOpen(!isOpen) }}>
<i className="collection-nav_item-link_icon"></i>
<span className="collection-nav_item-link_text">{ category.name }</span>
</Link>
<Dropdown
toggleClassName="btn-icon-white btn-sm"
toggleContent={ <Icon name="ellipsis-h" />}
position="bottom-end"
size="small"
items={[
{ text: 'Edit category' },
{ text: 'Add subcategory', onClick: (() => { dispatch(openAddSubcategory(category)) }) }
]} />
</div>
{ children }
</div>
Run Code Online (Sandbox Code Playgroud)
该Dropdown组件是我们使用 Popper 的地方,它在其他地方也能正常工作。a 的可见性CategoryNavItem是通过 React 中组件的状态来处理的。
有没有办法在React中以编程方式触发Popper的update()方法?我们应该强制update切换项目的可见性。
Ben*_*enM 18
事实证明,我们只需要从钩子update中公开该属性usePopper,然后在设置下拉列表的可见性时调用它,例如:
const { styles, attributes, update } = usePopper(referenceElement, popperElement, {
placement: placement,
modifiers: [
{ name: 'arrow', options: { element: arrowElement } },
{ name: 'offset', options: { offset: [ 0, 3 ] } }
]
});
Run Code Online (Sandbox Code Playgroud)
同样:
const toggleDropdown = (e) => {
e.preventDefault();
e.stopPropagation();
setVisible(!visible);
update();
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11931 次 |
| 最近记录: |