antd中Drawer组件使用getContainer方法获取dom节点时初次获取到的是null问题完美解决

/* eslint-disable no-console,react/no-multi-comp */
import Drawer from 'rc-drawer';
import React from 'react';
import ReactDom from 'react-dom';
import { Menu, Icon } from 'antd';

import 'antd/lib/style';
import 'antd/lib/menu/style';

import 'rc-drawer/assets/index.less';
import './assets/index.less';

const { SubMenu } = Menu;
const MenuItemGroup = Menu.ItemGroup;

class DrawerTester extends React.Component {
  getContainer = () => {
    return this.container;
  };
  saveContainer = container => {
    this.container = container;
  };
  render() {
    return (
      <div>
        <div ref={this.saveContainer} />
        <Drawer
          width="20vw"
          getContainer={this.getContainer}
        >
          <Menu
            defaultSelectedKeys={['1']}
            defaultOpenKeys={['sub1']}
            mode='inline'
          >
            <SubMenu
              key='sub1'
              title={
                <span>
                  <Icon type='mail' />
                  <span>Navigation One</span>
                </span>
              }
            >
              <MenuItemGroup key='g1' title='Item 1'>
                <Menu.Item key='1'>Option 1</Menu.Item>
                <Menu.Item key='2'>Option 2</Menu.Item>
              </MenuItemGroup>
              <MenuItemGroup key='g2' title='Item 2'>
                <Menu.Item key='3'>Option 3</Menu.Item>
                <Menu.Item key='4'>Option 4</Menu.Item>
              </MenuItemGroup>
            </SubMenu>
            <SubMenu
              key='sub2'
              title={
                <span>
                  <Icon type='appstore' />
                  <span>Navigation Two</span>
                </span>
              }
            >
              <Menu.Item key='5'>Option 5</Menu.Item>
              <Menu.Item key='6'>Option 6</Menu.Item>
              <SubMenu key='sub3' title='Submenu'>
                <Menu.Item key='7'>Option 7</Menu.Item>
                <Menu.Item key='8'>Option 8</Menu.Item>
              </SubMenu>
            </SubMenu>
            <SubMenu
              key='sub4'
              title={
                <span>
                  <Icon type='setting' />
                  <span>Navigation Three</span>
                </span>
              }
            >
              <Menu.Item key='9'>Option 9</Menu.Item>
              <Menu.Item key='10'>Option 10</Menu.Item>
              <Menu.Item key='11'>Option 11</Menu.Item>
              <Menu.Item key='12'>Option 12</Menu.Item>
            </SubMenu>
          </Menu>
        </Drawer>
      </div>
    );
  }
}

ReactDom.render(<DrawerTester />, document.getElementById('__react-content'));
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据您的问题,您可能在开发React组件遇到了这个问题。这个问题通常发生在您使用antd或类似UI库的Tree组件,当您在Tree节点的checkbox上单击,您需要更新组件的状态以显示checkbox是否选。但是,当您在handleCheckChange方法访问data.key,data.key是undefined。 这是因为antd的Tree组件在触发handleCheckChange方法,会将选节点作为参数传递给该方法,而不是该节点的key属性。因此,要获取当前节点的key属性,您可以通过以下方式进行: 1. 在Tree节点上添加一个onClick方法,该方法节点的key属性作为参数传递给handleCheckChange方法。 ```javascript <Tree checkable onCheck={this.handleCheckChange} > {renderTreeNodes(treeData)} </Tree> function renderTreeNodes(data) { return data.map(item => { if (item.children) { return ( <TreeNode title={item.title} key={item.key} onClick={() => this.handleNodeClick(item.key)} > {renderTreeNodes(item.children)} </TreeNode> ); } return <TreeNode title={item.title} key={item.key} />; }); } handleNodeClick = (key) => { console.log(key); // call handleCheckChange method with the key this.handleCheckChange(key); } handleCheckChange = (checkedKeys) => { console.log(checkedKeys); // your logic to update the component state } ``` 2. 在handleCheckChange方法使用Tree组件的state来获取节点的key属性。 ```javascript handleCheckChange = (checkedKeys) => { const { checkedNodes } = this.tree.state; const selectedNode = checkedNodes.find(node => node.key === checkedKeys[0]); console.log(selectedNode.key); // your logic to update the component state } ``` 这两种方法都可以解决获取当前节点key属性的问题,您可以根据自己的需求选择其一种。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值