{"id":1627,"date":"2021-05-24T21:17:27","date_gmt":"2021-05-24T13:17:27","guid":{"rendered":"http:\/\/149.129.74.185\/?p=1627"},"modified":"2021-05-24T21:39:25","modified_gmt":"2021-05-24T13:39:25","slug":"react-%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8-d3-ant-design-dropdown-%e4%bc%98%e9%9b%85%e5%9c%b0%e5%ae%9e%e7%8e%b0%e5%8f%b3%e9%94%ae%e8%8f%9c%e5%8d%95","status":"publish","type":"post","link":"http:\/\/www.magicmipamipa.com\/?p=1627","title":{"rendered":"React : \u5982\u4f55\u4f7f\u7528 D3 + Ant-design Dropdown \u4f18\u96c5\u5730\u5b9e\u73b0\u53f3\u952e\u83dc\u5355"},"content":{"rendered":"<p>Ant-design\u7684 dropdown \u7ec4\u4ef6\u4e2d\u9488\u5bf9\u53f3\u952e\u83dc\u5355\u63d0\u51fa\u4e86\u4e00\u4e2a\u7528\u6cd5\uff0c\u5373\u5c06\u00a0<code>trigger<\/code> \u8bbe\u7f6e\u4e3a <code>contextmenu<\/code>\u00a0\uff0c\u4ee5\u8fd9\u79cd\u65b9\u6cd5\u53ef\u4ee5\u5728\u00a0<code>render<\/code> \u4e2d\u4f7f\u5f97\u5176\u4e0b\u5c5e\u7684 <code>contextmenu<\/code> \u90fd\u53d8\u4e3a\u8fd9\u4e00\u4e0b\u62c9\u83dc\u5355\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">import { Menu, Dropdown } from 'antd';\r\n\r\nconst menu = (\r\n  &lt;Menu&gt;\r\n    &lt;Menu.Item key=\"1\"&gt;1st menu item&lt;\/Menu.Item&gt;\r\n    &lt;Menu.Item key=\"2\"&gt;2nd menu item&lt;\/Menu.Item&gt;\r\n    &lt;Menu.Item key=\"3\"&gt;3rd menu item&lt;\/Menu.Item&gt;\r\n  &lt;\/Menu&gt;\r\n);\r\n\r\nReactDOM.render(\r\n  &lt;Dropdown overlay={menu} trigger={['contextMenu']}&gt;\r\n    &lt;div\r\n      className=\"site-dropdown-context-menu\"\r\n      style={{\r\n        textAlign: 'center',\r\n        height: 200,\r\n        lineHeight: '200px',\r\n      }}\r\n    &gt;\r\n      Right Click on here\r\n    &lt;\/div&gt;\r\n  &lt;\/Dropdown&gt;,\r\n  mountNode,\r\n);<\/pre>\n<p>\u53c2\u8003\uff1a<a href=\"https:\/\/ant.design\/components\/dropdown-cn\/\">\u4e0b\u62c9\u83dc\u5355-Ant-design<\/a><\/p>\n<p>\u4f46\u662f\u5728d3\u4e2d\uff0c\u5143\u7d20\u662f\u52a8\u6001\u751f\u6210\u7684\uff0c\u5df2\u77e5\u7684\u53ea\u6709svg\u753b\u5e03\uff0c\u5982\u4f55\u4f7f\u53ea\u6709\u5728\u70b9\u51fb\u5230\u5143\u7d20\u7684\u65f6\u5019\u53f3\u952e\u83dc\u5355\u624d\u4f1a\u51fa\u73b0\uff0c\u5e76\u4e14\u5339\u914d\u5f53\u524d\u9009\u4e2d\u5143\u7d20\u7684\u5c5e\u6027-&gt;\u662f\u95ee\u9898\u63d0\u51fa\u7684\u80cc\u666f\u3002<\/p>\n<p>d3\u4e2d\u9488\u5bf9\u9f20\u6807\u4e8b\u4ef6\uff0c\u5b58\u5728\u8bb8\u591a\u7684\u56de\u8c03\u51fd\u6570\uff0c\u5176\u4e2d\u00a0<code>.on('contextmenu',function)<\/code> \u8fd9\u4e00\u56de\u8c03\u662f\u9488\u5bf9\u53f3\u952e\u83dc\u5355\u7684\u3002\u5373\u70b9\u51fb\u9f20\u6807\u53f3\u952e\u4f1a\u8c03\u7528\u8be5\u51fd\u6570\u3002<\/p>\n<p>Ant-design \u7684 dropdown \u53ef\u4ee5\u8bbe\u7f6e\u00a0<span>visible \u6570\u503c\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u7684 d3 \u56de\u8c03\u51fd\u6570\u53ef\u4ee5\u8fd9\u6837\u5b89\u6392\uff1a\u8bbe\u7f6e\u53f3\u952e\u83dc\u5355\u5bf9\u5e94\u7684\u5143\u7d20\u5c5e\u6027-&gt;\u5c06\u53f3\u952e\u83dc\u5355\u7684 visible \u8bbe\u4e3a true\u3002<\/span><\/p>\n<p>\u53f3\u952e\u83dc\u5355\u7684\u5143\u7d20\u5c5e\u6027\u548c visible \u90fd\u53ef\u4ee5\u5b58\u5728\u7ec4\u4ef6\u7684 state \u91cc\u3002\u8fd9\u6837\u5c31\u80fd\u5b9e\u73b0\u53f3\u952e\u5143\u4ef6\u65f6\u83dc\u5355\u624d\u51fa\u73b0\u7684\u6548\u679c\u3002\u53e6\u5916\u8fd8\u9700\u8981\u6dfb\u52a0\u83dc\u5355\u6d88\u5931\u7684\u6548\u679c\uff0c\u5728\u70b9\u51fb\u83dc\u5355\u4e2d\u7684\u52a8\u4f5c\u7ed3\u675f\u65f6\u3001\u9f20\u6807\u79fb\u51fa\u8be5\u533a\u57df\u65f6\u3001\u9f20\u6807\u70b9\u51fb\u5176\u4ed6\u533a\u57df\u65f6\u52a0\u5165\u56de\u8c03 <code>this.setState({menuVisible:false})<\/code>\u00a0\u5373\u53ef\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>render\u90e8\u5206\uff1a<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">render() {\r\n\r\n    const self = this;\r\n    const menu = (\r\n        &lt;Menu onClick={self.handleMenuClick}&gt;\r\n          &lt;Menu.Item key=\"1\"&gt;\u8df3\u8f6c&lt;\/Menu.Item&gt;\r\n          &lt;Menu.Item key=\"2\"&gt;\u4fee\u6539\u68c0\u67e5\u72b6\u6001&lt;\/Menu.Item&gt;\r\n          &lt;Menu.Item key=\"3\"&gt;\u4ee5\u8be5\u9876\u70b9\u4e3a\u6839\u91cd\u7f6e&lt;\/Menu.Item&gt;\r\n        &lt;\/Menu&gt;\r\n      );\r\n    return (\r\n        &lt;&gt;\r\n        &lt;div&gt;\r\n        &lt;Collapse defaultActiveKey={['1']}&gt;\r\n            &lt;Panel header=\"\u4e8c\u7ef4\u53ef\u89c6\u5316\" key=\"1\"&gt;\r\n            &lt;Row&gt;\r\n                &lt;Col&gt;\r\n                \u9009\u62e9\u7aef\u70b9Index\uff1a &lt;InputNumber defaultValue={this.props.data.selectedVertexIndex} onChange={(v)=&gt;this.onChange(v)} \/&gt;\r\n                &lt;\/Col&gt;\r\n            &lt;\/Row&gt;\r\n            &lt;Dropdown overlay={menu} trigger={['contextMenu']} visible={self.state.menuVisible}&gt;\r\n            &lt;div className=\"Rectangle\" id=\"Rectangle\" ref=\"Rectangle\" onClick={()=&gt;self.setState({menuVisible:false})}&gt;\r\n                &lt;div className=\"wuliwala\"&gt;\r\n                        &lt;svg&gt;&lt;\/svg&gt;\r\n                &lt;\/div&gt;\r\n            &lt;\/div&gt;\r\n            &lt;\/Dropdown&gt;\r\n            &lt;\/Panel&gt;\r\n        &lt;\/Collapse&gt;\r\n        &lt;\/div&gt;\r\n&lt;\/&gt;\r\n    );\r\n}<\/pre>\n<p>d3.node\u90e8\u5206\uff1a<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">var nodeEnter = node.enter().append('g')\r\n    .attr('class', 'node')\r\n    .attr(\"transform\", function(d) {\r\n        return \"translate(\" + source.y0 + \",\" + source.x0 + \")\";\r\n    })\r\n    .on('click', click)\r\n    .on('dblclick',onClickJump)\r\n    .on(\"mouseover\", mouseover)\r\n    .on(\"mousemove\", function(event, d){\r\n    mousemove(event, d);})\r\n    .on(\"mouseout\", mouseout)\r\n    .on(\"contextmenu\", menu)\r\n\r\nvar menu = (e,i) =&gt;{\r\n    console.log(e);\r\n    console.log(i);\r\n    self.setState({menuIndex:i.data.name,menuVisible:true,checked:i.data.checked});\r\n}<\/pre>\n<p>this.state\u90e8\u5206\uff1a<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">this.state = {\r\n    menuIndex:-1,\r\n    menuVisible: false,\r\n    checked:false,\r\n};<\/pre>\n<p>\u4e5f\u53ef\u4ee5\u5728\u8fd9\u91cc\u76f4\u63a5\u5b58\u50a8\u5168\u90e8\u7684 data \u800c\u4e0d\u662f\u5355\u5c5e\u6027\u5b58\u50a8\uff0c\u4e0d\u8fc7\u6682\u65f6\u61d2\u5f97\u6539\u4e86\uff09<\/p>\n<p>\u7136\u540e\u518d\u5199\u4e00\u4e2a <code>handleMenuClick<\/code>\u00a0\u56de\u8c03\u5373\u53ef\uff0c\u5c31\u662f\u83dc\u5355\u4e2d\u9009\u62e9\u4e0d\u540c\u9009\u9879\u4e4b\u540e\u7684\u64cd\u4f5c\uff0c\u8bb0\u5f97\u5728\u8fd9\u4e2a\u91cc\u9762\u52a0\u4e0a\u4e00\u53e5 <code>this.setState({menuVisible:false});<\/code>\u00a0\u3002\u4e0b\u9762\u662f\u672c\u4eba\u4e0d\u9177\u7684\u6548\u679c\u5c55\u793a\uff1a<\/p>\n<p><video width=\"900\" height=\"500\" controls=\"controls\"><source src=\"http:\/\/149.129.74.185\/wp-content\/uploads\/2021\/05\/20210524-213639980.mp4\" type=\"video\/mp4\" \/><\/video><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ant-design\u7684 dropdown \u7ec4\u4ef6\u4e2d\u9488\u5bf9\u53f3\u952e\u83dc\u5355\u63d0\u51fa\u4e86\u4e00\u4e2a\u7528\u6cd5\uff0c\u5373\u5c06\u00a0trigger \u8bbe [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[40,26,16,32],"tags":[],"_links":{"self":[{"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=\/wp\/v2\/posts\/1627"}],"collection":[{"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1627"}],"version-history":[{"count":3,"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=\/wp\/v2\/posts\/1627\/revisions"}],"predecessor-version":[{"id":1631,"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=\/wp\/v2\/posts\/1627\/revisions\/1631"}],"wp:attachment":[{"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1627"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.magicmipamipa.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}