问题描述
我正在使用 Primereact 的树和上下文菜单。执行操作(菜单项之一上的单击事件)后,上下文菜单不会隐藏。如果我点击屏幕上的任何地方,上下文菜单就会隐藏。这是代码。我遵循 Primereact 提供的相同模式。你能帮我弄清楚如何解决这个问题吗?
DemoPrimeReact.js
{'d':'AAAAA@X##{"pp-0": 1000,"pp-1":1001,"pp-2":1002,"pp-3": 1003,"pp-4": 1004,"pp-5": 1005,"pp-6": 1006,"pp-7": 1007,"pp-8": 1008,"pp-9": 1009,"pp-10": 1010,"pp-11": 1011,"pp-12": 1012,"pp-13": 1013,"pp-14": 1014,"pp-17": 1015,"pp-27": 1016}'}
DemoContextMenu.js
import React,{useContext,useEffect,useRef,useState} from 'react';
import 'primereact/resources/themes/saga-blue/theme.css';
import 'primereact/resources/primereact.css';
import 'primeflex/primeflex.css';
import {Tree} from 'primereact/tree';
// other imports
const DemoPrimeReact = () => {
// .... other lines skipped
const [selectednodeKey,setSelectednodeKey] = useState(null);
const contextMenu = useRef(null);
return (
<>
<DemoContextMenu
contextMenu={contextMenu} setSelectednodeKey={setSelectednodeKey}
//... other props
/>
<Tree
value={[withOrWithoutSearchNodes[0]]}
selectionMode="single" selectionKeys={selectedKey} onSelectionChange={handleSelectionChange}
onSelect={onNodeselect} onUnselect={onNodeUnselect}
expandedKeys={expandedKeys} onToggle={(event) => setExpandedKeys(event.value)}
contextMenuSelectionKey={selectednodeKey}
onContextMenuSelectionChange={(event) => setSelectednodeKey(event.value)}
onContextMenu={(event) => contextMenu.current.show(event.originalEvent)}
dragdropScope="catalog-dnd" onDragDrop={(event) => {
handleCatalogDragAndDrop(event,setLoading,setCanPaste,loadChildrenOnExpand,setSelectedKey,setExpandedKeys,onNodeselect,setNodes,expandedKeys);
}}
onExpand={loadChildrenOnExpand} className={classes.primeTree} nodeTemplate={nodeTemplate}
/>
</>
);
}
export default DemoPrimeReact;
解决方法
我认为您可以使用 contextMenu
使用 contextMenu.current.state.visible = false;
ref 隐藏上下文菜单。
您可以在开始时将此行放在 handleCatalogAction(...)
函数中。在添加以上行之前,您可以执行 console.log(contextMenu);
检查 current.state.visible
值。