Ant design Tree defaultExpandAll 不适用于单击按钮进行反应

2024-04-19

我正在使用 Ant Design for React Js UI。我使用树组件显示在列表中。我还有 2 个按钮来展开和折叠树列表。我用默认展开全部道具来管理这个。 在展开和折叠按钮上单击我分别将布尔值设置为 true 和 false。 按钮在单击按钮时不会展开。 如果我最初将 True 设置为该标志状态,它就会起作用。 有什么解决办法吗?

我有 2 个组件。 (展开和折叠按钮位于父组件中)

**Parent Component**

    setExpandOrCollapse(value) {
        this.setState({ expandOrCollapse: value });
      }

    <HeaderRow>
                  <Button onClick={() => this.setExpandOrCollapse(true)}>Expand All</Button>
                  <Button onClick={() => this.setExpandOrCollapse(false)}>Collapse All</Button>
                </HeaderRow>

    <Card>
                  {ItemTree && (ItemTree.length > 0) ? (
                    <ItemTree
                      dataSource={ItemTree}
                      expandOrCollapse={expandOrCollapse}
                    />
                  ) : null }
                </Card>

**Child Component**
<Tree
      draggable={isDraggable}
      defaultExpandAll={expandOrCollapse}
    >
      {loopitemNodes(dataSource)}
    </Tree>

dataSource是从Redux api调用中获取的。

有什么解决办法吗?


Ant 设计中的状态前缀为default仅在第一次渲染时才起作用(因此default).

为了实现编程式扩展和折叠,您需要使用以下命令来控制树的扩展expandedKeys and onExpand props.

import { flattenDeep } from "lodash";

class Demo extends React.Component {
  state = {
    expandedKeys: []
  };

  constructor(props) {
    super(props);
    this.keys = this.getAllKeys(treeData);
  }

  getAllKeys = data => {
    // This function makes an array of keys, this is specific for this example, you would have to adopt for your case. If your list is dynamic, also make sure that you call this function everytime data changes.
    const nestedKeys = data.map(node => {
      let childKeys = [];
      if (node.children) {
        childKeys = this.getAllKeys(node.children);
      }
      return [childKeys, node.key];
    });
    return flattenDeep(nestedKeys);
  };

  onExpand = expandedKeys => {
    console.log("onExpand", expandedKeys);
    // if not set autoExpandParent to false, if children expanded, parent can not collapse.
    // or, you can remove all expanded children keys.
    this.setState({
      expandedKeys
    });
  };

  renderTreeNodes = data =>
    data.map(item => {
      if (item.children) {
        return (
          <TreeNode title={item.title} key={item.key} dataRef={item}>
            {this.renderTreeNodes(item.children)}
          </TreeNode>
        );
      }
      return <TreeNode key={item.key} {...item} />;
    });

  expandAll = () => {
    this.setState({
      expandedKeys: this.keys
    });
  };

  collapseAll = () => {
    this.setState({
      expandedKeys: []
    });
  };

  render() {
    return (
      <Fragment>
        <button onClick={this.expandAll}>Expand All</button>
        <button onClick={this.collapseAll}>Collapse All</button>
        <Tree onExpand={this.onExpand} expandedKeys={this.state.expandedKeys}>
          {this.renderTreeNodes(treeData)}
        </Tree>
      </Fragment>
    );
  }
}

代码沙箱 https://codesandbox.io/s/eloquent-jennings-l99gn

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ant design Tree defaultExpandAll 不适用于单击按钮进行反应 的相关文章

  • 当属性值在 HTML5 中可以保持不带引号时

    HTML5 中什么时候属性值可以保持不带引号 HTML4 01 是一个 SGML 应用程序 因此 在 HTML4 中 如果值中使用的唯一字符是当前声明为名称字符的字符 字母数字字符 句号 则可以省略引号 好吧 来自 W3C 工作草案 201
  • CSS 可见性动画不起作用

    我想在 CSS 可见性属性上制作基于关键帧的动画 我最初在 显示 上尝试过 但发现不支持 显示 上的动画 但支持 可见性 这个想法是让矩形的可见性不断切换 我不想使用 jquery 并且想在 CSS 中实现整个它 以下是我的代码 但它没有给
  • 获取:使用获取响应设置变量并从函数返回[重复]

    这个问题在这里已经有答案了 我对 JavaScript 和 React 还很陌生 我有一个来自组件的回调 该组件从给定 id 的服务器获取 customer name 提取工作正常 console log 正确打印全名 但最后一个 then
  • 将外部 SVG 加载到 DOM 中,当前文档而不是子文档

    我正在尝试将外部 SVG 文档加载到一个简单的网页中 以便我可以将其用作基本的氯罗佩斯地图 然而 使用HTML 中的结果是 SVG 作为子文档加载 基本上我无法使用 jquery 按 ID 查询 SVG 路径 例如 NY css fill
  • 使用 React 组件内的 标签进行锚定导航

    我正在尝试在我的反应应用程序内的页面组件之一中设置锚点导航 我正在尝试模仿所看到的相同功能在 Draft js 上 https draftjs org docs getting started installation它使用子标题作为锚点
  • 将 chrome api 与 React.js 结合使用

    我一直在尝试使用 React 制作一个简单的 Chrome 扩展 清单看起来像这样 name New Tab version 1 0 manifest version 2 description A minimalist replaceme
  • 如何动态更改表格单元格文本颜色?

    我需要一个解决方案来通过 javascript 动态更改表格单元格的文本颜色 文本可以是以下颜色 蓝色 绿色 红色和黑色 表示例
  • 如何在 Angular2 中嵌入视频?

    我想开发单页应用程序 它是一个视频门户 用户可以登录 查看视频列表 导航到单个视频 对视频进行评分 并可以执行所有媒体相关任务 例如 播放 暂停 调整音量和寻找视频位置 既然有
  • 使用 Selenium 自动化结帐流程时出现 403

    我正在尝试使用 python 和 selenium 创建一个脚本来自动执行 bestbuy ca 的结帐过程 我一直到达最后阶段 您可以单击以查看最终订单 但当我尝试单击到最后一步时 收到以下 403 禁止消息 如网络响应中所示 是否有服务
  • 如何使用 iText 将 HTML 转换为 PDF [重复]

    这个问题在这里已经有答案了 import java io File import java io FileOutputStream import java io OutputStream import com itextpdf text D
  • Phonegap html5视频无法播放

    我正在尝试在 iPad 上的phonegap 应用程序中播放视频 该视频给了我错误 MEDIA ERR SRC NOT SUPPORTED 我尝试播放的视频不是本地的 当我在该视频上使用curl I 时 这是它带来的信息 HTTP 1 1
  • 如果在 React JS 中选中复选框,如何隐藏或显示 div

    我如何在React JS中根据复选框状态 选中 未选中 显示 隐藏div 我对React很陌生 我知道如何在jquery中执行此操作 但在React上是另一种方法 提前致谢 EDITED 如果选中或未选中该复选框 则想要显示 隐藏带有 cl
  • 防止左浮动 div 转到新行

    我有 4 个 div 设置为向左浮动 但最后的 div 不断在较小的屏幕上换行两个新行 这真的很烦我 我希望它们随屏幕尺寸缩放 以便它们始终保持在同一行上屏幕尺寸 并且我尝试不使用桌子 这非常诱人 因为他们对此非常可靠 我想知道如何解决这个
  • JS 中的触摸板滚动检测,无库

    我正在制作自己的小型 Javascript 库 可以轻松地将您网站 和我的网站 的默认滚动条替换为自定义滚动条 其中一部分意味着为 BODY 元素提供 overflow hidden 样式来隐藏正常的滚动条 但是 这会阻止除代码中完成的滚动
  • 打开图层地图,经纬度获取地址

    我正在尝试获取带有经度和纬度的地址 城市 邮政编码 街道地址 但我不知道如何获取 我正在使用开放图层 当我单击地图的一部分时 会获取该位置的经度和纬度 有人有解决方案吗 div class map div
  • ReactJs / Typescript:如何扩展状态接口

    我有以下内容 interface EditViewState
  • 如何在reactJS中显示从输入类型=文件中选择的图像

    我正在尝试在我的网络应用程序中显示从我的计算机中选择的图像 我提到了以下问题 它解决了我试图解决的问题 如何在不向服务器发送数据的情况下显示选定的图像 https stackoverflow com questions 17138244 h
  • 如何设计一个在 Firefox、Chrome 和 IE11 中看起来相同的单选按钮

    我想设计一组单选按钮 它们在 Chrome Firefox 和 IE 11 中看起来应该相同 我的解决方案在 Firefox 中看起来相当不错 在 Chrome 中 按钮周围有一个蓝色框 而在 IE 11 中 颜色和边框似乎无法识别 它应该
  • Codeigniter 中的 HTML 格式的电子邮件

    如何在 codeigniter 中发送格式化的电子邮件 我有这段代码 可以很好地发送电子邮件 但它没有按应有的方式格式化它 您可以看到显示收到电子邮件的图片 function email sender this gt load gt hel
  • Material-UI 中 IconButton 的悬停效果

    图标按钮悬停 https i stack imgur com lsYHX png 这是我正在使用的 Material UI 中的 iconButton 正如您所看到的 当您将鼠标悬停在图标上时 图标周围有一个轻微的灰色边框 禁用此功能的属性

随机推荐

  • 编码系统按1的个数排序

    我想到了一个编码系统 arr encoded code decoded code 如下 arr是小于 2 16 pow 2 16 的二进制非负整数数组 arr 0 0 each of arr 1 16 有一个 1 1 10 100 1000
  • 如何以轮子格式安装 Python 库?

    我正在寻找有关如何以轮格式安装 Python 库的教程 它看起来并不简单 所以我希望有一个简单的分步教程 说明如何为 CPython 安装名为 requests 的模块 我从以下位置下载的 https pypi python org pyp
  • ld:为 iOS 模拟器构建,但链接到 dylib?

    我在为模拟器编译应用程序时遇到问题 在设备中运行完美 但是当我尝试在模拟器中编译它时 我收到以下错误 ld building for iOS Simulator but linking against dylib built for Mac
  • MSBUILD 使用 XML 文档文件构建项目

    这应该很容易 但我无法让它发挥作用 我有一个 Web 项目 它引用我的解决方案中的另一个项目 我们称之为 Project1 这两个项目都设置为创建 XML 文档文件 当我右键单击 Web 项目并在 Visual Studio 中构建时 我的
  • 在 pyCharm 上使用张量流

    我是深度学习新手 刚刚在我的 Mac 上安装了 Tensorflow 然而 也存在一些问题 我确信我安装成功 因为我可以使用 python 3 5 在终端上运行tensorflow import tensorflow as tf node1
  • 世博会互动推送通知

    我正在尝试发送交互式推送通知Expo https expo io 我可以很好地发送普通的推送通知 甚至可以发送local交互式推送通知 但是我无法发送远程交互式推送通知 根据本节 https docs expo io versions la
  • 正则表达式仅匹配第一行?

    是否可以使正则表达式仅匹配文本的第一行 所以如果我有文字 这是第一行 这是第二行 无论第一行是什么 它都会匹配 这是第一行 这听起来更像是文件句柄缓冲区的工作 您应该能够将第一行与 m 一如既往 这是 PCRE 语法 the m修饰符使 a
  • 通过 Api 进行信用卡贷记和借记/ACH 贷记和借记,无需用户交互

    我正在寻找一种方法来自动从一张信用卡到另一张信用卡或从一个银行帐户到另一个银行帐户的转账 而最终用户无需登录贝宝或亚马逊支付之类的东西来完成该过程 通过转账 他们的在线余额到他们的银行帐户 这是对先前问题的延伸 用于直接存款的 API AC
  • 在 Swift 中将整数转换为 NSData

    在 Objective C 中 代码看起来像这样 NSInteger random arc4random uniform 99 1 NSData data NSData dataWithBytes random length sizeof
  • 100%宽度的固定div与滚动条重叠

    如此处所示 http codepen io anon pen rVPqeL http codepen io anon pen rVPqeL 我正在使用 3 个简单的 div 我想获得必须消失的 全局 滚动条的效果over标题 html是非常
  • PHP Oracle 查询 select 语句在循环内速度慢

    我有这个 php 函数来检查数据并将其从文本文件插入数据库 Get All Model qModel oci parse c1 SELECT MODELID MODEL NAME FROM MEP TBL MODEL WHERE ACTIV
  • 取消不接受 CancellationToken 的异步操作的正确方法是什么?

    取消以下内容的正确方法是什么 var tcpListener new TcpListener connection tcpListener Start var client await tcpListener AcceptTcpClient
  • 无法在用户控件上设置 DefaultButton

    我正在尝试将用户控件上的按钮设置为页面上的默认按钮 但它不起作用 这是我的用户控件的代码
  • 有没有一种简单的方法将布尔值转换为整数?

    我是 Scala 新手 我发现需要将布尔值转换为整数 我知道我可以使用类似的东西if x 1 else 0但我想知道是否有首选方法 或者语言中内置的东西 即toInt 如果你想混合Boolean and Int操作使用一个implicit如
  • Java Stream:通过布尔谓词分为两个列表

    我有一个清单employees 他们有isActive布尔字段 我想分employees分为两个列表 activeEmployees and formerEmployees 是否可以使用 Stream API 来实现 最尖端的方法是什么 C
  • java.lang.NoClassDefFoundError:解析失败:Ljava/time/Instant;

    目前 我无法解决崩溃问题java lang NoClassDefFoundError Failed resolution of Ljava time Instant Android 7 1 1 Nougat 及更低版本会发生此类崩溃 但我的
  • 使用 javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL 导致 viewParam 为 null

    我正在尝试将应用程序从 WildFly 13 Java EE 7 JSF 2 2 15 切换到 WildFly 16 Java EE 8 JSF 2 3 9 尝试了 PrimeFaces 6 2 和 7 0 在 web xml 中javax
  • 将锯齿状数组转换为二维数组 C#

    我正在尝试将此函数从锯齿状数组转换为二维数组 但我无法转换所有内容 原功能 public static double InvertMatrix double A int n A Length e will represent each co
  • Sql 就像c++中类似的使用

    我想问一个简单的问题 有没有办法在c 中使用 like 这样的东西 LIKE s 我想要在 C 中这样的东西 因为如果我希望用户在程序中找到某些东西 这只需匹配所有相关数据 常用表达 http en cppreference com w c
  • Ant design Tree defaultExpandAll 不适用于单击按钮进行反应

    我正在使用 Ant Design for React Js UI 我使用树组件显示在列表中 我还有 2 个按钮来展开和折叠树列表 我用默认展开全部道具来管理这个 在展开和折叠按钮上单击我分别将布尔值设置为 true 和 false 按钮在单