1 回答
TA贡献1853条经验 获得超18个赞
回调引用可能是一个解决方案。您可以使用状态在设置后存储引用,并传递this.state.ref给<ContextMenu/>组件。
但我建议你试试这个:
class WithContextMenu extends React.Component {
constructor(props) {
super(props);
this.state = {open: false};
}
openContextMenu(e) {
e.preventDefault();
this.setState({open: true});
}
render() {
return (<React.Fragment>
{React.cloneElement(
React.Children.only(this.props.children),
{ onContextMenu: this.openContextMenu.bind(this) }
)}
{ this.state.open && <div>context menu</div> }
</React.Fragment>)
}
}
// In any other component
const MyComponent = () => (
<WithContextMenu>
<div>
<h1>Hello</h1>
<p>Right-click to open context menu</p>
</div>
</WithContextMenu>
);
然后,您可以使用上下文菜单装饰任何组件。下面是它的工作原理:
将任何组件包裹在一个
WithContextMenu
组件中一个
onContextMenu
事件处理程序被附接到包裹部件当事件处理程序被触发时,上下文菜单本身与包装的组件一起呈现
添加回答
举报