New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Tree组件增加右键菜单 #5151
Comments
这个例子给我没用,我是用antD的。 |
antd 的组件都是基于 react-component 封装的,Tree 的 API 是一致的,上面的例子可以直接参考。 |
我实现了,看下关键的几行代码就明白了
// 实现这个方法 treeNodeonRightClick
// id 和 categoryName 是生成时绑上去的
// 最后绑个菜单就可以实现了
|
@jcy2004x 请问您定义的这个getNodeTreeRightClickMenu方法是在哪里调用的? |
@chj-damon |
可以写明白点吗?调用getNodeTreeRightClickMenu函数 后 那个 menu 怎么显示到页面上? |
上面的方法可行,不过里面有个获取位置的方法建议用 个人写法
|
可以不用自己写,也不用antd的tree的右键事件属性,antd官方推荐了两个优秀的右键菜单组件,我只用了其中一个https://github.com/fkhadra/react-contexify
|
@dargonpaul
|
@guirenpei 用Menu替换ContextMenu就可以 |
ok, thx |
import React from 'react';
import { Tree } from 'antd';
import { Menu, Item, MenuProvider } from 'react-contexify';
import 'react-contexify/dist/ReactContexify.min.css';
// contextMenu: { menuId, items: { name, handler }} 上下文菜单
// dataSource: 树节点
const TreeWithContextMenu = ({ dataSource, contextMenu }) => {
// 上下文菜单
const ContextMenu = () => (
<Menu id={contextMenu.menuId}>
{contextMenu.items.map(item => (
<Item onClick={item.handler}>{item.name}</Item>
))}
</Menu>
);
// 渲染树节点,主要目的是为了通过react-contexify包裹上下文菜单
const renderEntityTreeNodes = data => {
return data.map(item => {
const title = (
<MenuProvider id={contextMenu.menuId} data-key={item.key}>
<span>{item.title}</span>
</MenuProvider>
);
if (item.children) {
const result = (
<Tree.TreeNode {...item} key={item.key} title={title}>
{renderEntityTreeNodes(item.children)}
</Tree.TreeNode>
);
return result;
}
return <Tree.TreeNode {...item} key={item.key} title={title} />;
});
};
return (
<div>
<Tree defaultExpandedKeys={['0-0-0']}>{renderEntityTreeNodes(dataSource)}</Tree>
<ContextMenu />
</div>
);
};
export default TreeWithContextMenu; In case有人需要,贴个完整版的组件。 |
菜单是弹出来了,但是位置始终不对。 |
还是你这个方案好,上面直接用onRightClick鼠标位置都不正确。不过数据结构应该是个数组吧 |
<a-dropdown :trigger="['contextmenu']">
<a-tree>
</a-tree>
<a-menu slot="overlay">
<a-menu-item key="1">1st menu item</a-menu-item>
<a-menu-item key="2">2nd menu item</a-menu-item>
<a-menu-item key="3">3rd menu item</a-menu-item>
</a-menu>
</a-dropdown> |
这行改成 |
Now you don't need react-contexify any more. Use antd Dropdown component is better, you still need to custom the title of the tree node, then use Dropdown to wrapper it, like below: |
如果这个菜单在一个滚动容器内,点击坐标怎么获取呢 |
react-contexify哪个版本?,react-contexify 5.0.0没有这个MenuProvider呀。 |
什么版本?没有MenuProvider |
4.5以上版本基于 @PeiHaigang 的补充: 使用
|
tree组件需要有右键上下文菜单,经常需要在某个节点上进行操作。
现在tree没有这个属性
The text was updated successfully, but these errors were encountered: