微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

react 日常遇坑

记录日常开发中遇到的问题(组件来自antdesign)

  1. Tree组件:展开同级目录时,不会关闭一个目录。所以在expandedKeys中追踪展开目录时,数组中的元素是所有展开节点的集合,不是很方便获取。于是,通过修改onExpand事件,每展开一个目录,则关闭一个。具体代码如下:
// tree展开事件
  treeOnExpand (expandedKeys,e) {
    if (e.node.props.pos.split('-').length === 3) {
      if (e.node.props.expanded) {
        this.state.treeList[1]--;
      } else {
        this.state.treeList[1]++;
      }
      if (this.state.treeList[1] >= 2) {
        expandedKeys.splice(1,1);
        this.state.treeList[1]--;
      }
    }
    if (e.node.props.pos.split('-').length === 2) {
      if (e.node.props.expanded) {
        this.state.treeList[0]--;
      } else {
        this.state.treeList[0]++;
      }
      if (this.state.treeList[0] >= 2) {
        expandedKeys.splice(0,expandedKeys.length - 1);
        this.state.treeList[0] = 1;
        this.state.treeList[1] = 0;
      }
    }
  }

    <Tree
        onExpand={this.treeOnExpand}
        expandedKeys={expandedKeys}
        autoExpandParent={autoExpandParent}
        onSelect={this.onSelect}
      >

通过修改expandedKeys的值,控制展开的层次。
2. TreeSelect: 由于下拉框展开是树形结构,同样面临展开层次太多的问题。node.props.root通过root属性,可以获取到展开的轨迹。轨迹的第一个元素为展开首节点,然后最后一个节点为展开的最后一个节点,由于项目最多只有三层结构,所以只要在expandedKeys取第一个和最后一个即可。问题在于该表单提交后,可能会再次编辑,所以内容需要再次填充。但是发现TreeSelect的展开轨迹仍然存在,并发生了错乱。导致第二次选择节点时,取到的数据错误解决方案:

 <TreeSelect  style={{ width: '100%' }} dropdownStyle={{ maxHeight: 400,overflow: 'auto' }} treeData={databaseTree} placeholder="请选择主实体" treeDefaultExpandedKeys={[]} onSelect={(value, node,extra) => { ...... }} />

通过treeDefaultExpandedKeys={[]}设置认值的方式,解决展开层次混乱的问题。 3.

原文地址:https://www.jb51.cc/react/301606.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐