reactjs 在AntD的叠加属性中使用自定义组件

nukf8bse  于 2023-01-17  发布在  React
关注(0)|答案(2)|浏览(215)

我正在尝试添加一个自定义的右键菜单组件到菜单项。我可以通过常量来完成,但是当我用组件来完成时,样式似乎会出错。有什么想法吗?
工作示例:https://codesandbox.io/s/m5n31opx2j
我的自定义菜单:

import React from "react";
import ReactDOM from "react-dom";
import Dropdown from "antd/lib/dropdown";
import Menu from "antd/lib/menu";
import "antd/dist/antd.css";

export default class MyMenu extends React.Component {
  render() {
    return (
      <Menu>
        <Menu.Item
          onClick={e => {
            alert("clicked");
          }}
        >
          click
        </Menu.Item>
        <Menu.Item>Like it</Menu.Item>
        <Menu.Item>Bookmark</Menu.Item>
      </Menu>
    );
  }
}

我的主要成分:

import React from "react";
import ReactDOM from "react-dom";
import Dropdown from "antd/lib/dropdown";
import Menu from "antd/lib/menu";
import "antd/dist/antd.css";
import MyMenu from "./MyMenu";

const menu = (
  <Menu>
    <Menu.Item
      onClick={e => {
        alert("clicked");
      }}
    >
      click
    </Menu.Item>
    <Menu.Item>Like it</Menu.Item>
    <Menu.Item>Bookmark</Menu.Item>
  </Menu>
);

class App extends React.Component {
  render() {
    return (
      <div>
        <Menu mode="horizontal">
          <Menu.Item
            key="1"
            onClick={() => {
              alert("parent clicked");
            }}
          >
            <Dropdown overlay={menu} trigger={[`contextMenu`]}>
              <span style={{ userSelect: "none" }}> from const </span>
            </Dropdown>
          </Menu.Item>

          <Menu.Item
            key="2"
            onClick={() => {
              alert("parent clicked");
            }}
          >
            <Dropdown overlay={<MyMenu />} trigger={[`contextMenu`]}>
              <span style={{ userSelect: "none" }}> from component </span>
            </Dropdown>
          </Menu.Item>
        </Menu>
      </div>
    );
  }
}

const APP_NODE = document.getElementById(`container`);
ReactDOM.render(<App />, APP_NODE);
5uzkadbs

5uzkadbs1#

这是因为在component中你用react类 Package 了Menu,并且你失去了对antd Dropdown组件的继承。
因此,您需要将Menu直接传递给Dropdown组件的overlay属性,就像使用常量menu时所做的那样:
这就是组件的工作原理。
要继续使用自定义组件方法,您需要在MyMenu组件中包含Dropdown,以便将Menu直接传递给overlay prop:

import React from "react";
import ReactDOM from "react-dom";
import Dropdown from "antd/lib/dropdown";
import Menu from "antd/lib/menu";
import "antd/dist/antd.css";

const menu = (
  <Menu>
    <Menu.Item
      onClick={e => {
        alert("clicked");
      }}
    >
      click
  </Menu.Item>
    <Menu.Item>Like it</Menu.Item>
    <Menu.Item>Bookmark</Menu.Item>
  </Menu>
);

export default class MyMenu extends React.Component {
  render() {
    return (
      <Dropdown overlay={menu} trigger={[`contextMenu`]}>
        <span style={{ userSelect: "none" }}> from const </span>
      </Dropdown>
    );
  }
}

希望这个有用。
在这里,您可以直接在源代码中看到这是如何完成的:www.example.comhttps://github.com/ant-design/ant-design/blob/557683c7644d2aef1e2df0490815b294b063d457/components/dropdown/dropdown.tsx#L74

8oomwypt

8oomwypt2#

使用下方样式的下拉组件

<Dropdown overlay={menu} trigger={[`contextMenu`]}>
  <span style={{ userSelect: "none" }}> from const </span>
</Dropdown>

给出以下警告
警告:[和:下拉列表] overlay已弃用。请改用menu
请建议正确的使用方法

相关问题