关于#react.js#的问题:使用antd的tree组件的时候,为什么defaultSelectedKeys的值一直是空的,怎么才能做到页面渲染的时候就能默认选中子组件

使用antd的tree组件的时候,为什么defaultSelectedKeys的值一直是空的,怎么才能做到页面渲染的时候就能默认选中子节点

img

使用selectedKeys

useEffect的执行是异步的,因此在初始渲染时,defaultSelectedKeys可能为空,因为treeData尚未加载完成。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这篇博客: 记录React项目中使用antd遇到的几个难搞的问题中的 2: antd的Menu(菜单)组件中的selectedKeys和defaultSelectedKeys的区别 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    您好!要在页面渲染时默认选中子节点,您可以通过将defaultSelectedKeys设置为子节点的key来实现。但在您提供的代码中,默认选中子节点没有生效的原因可能是由于组件的渲染次序,可以尝试通过以下方法解决:

    1. 通过给Tree组件添加一个属性expandAction来指定展开节点的行为为'click',这样点击父节点时也能展开。
    <Tree
      treeData={treeData}
      defaultSelectedKeys={['0-0']}
      expandAction="click"
    />
    
    1. 在组件内部使用useEffect钩子,通过依赖treeData来重新设置defaultSelectedKeys
    import { Tree } from 'antd';
    import { useEffect, useState } from 'react';
    
    const treeData = [
      // your data
    ];
    
    function MyTree() {
      const [selectedKeys, setSelectedKeys] = useState(['0-0']);
    
      useEffect(() => {
        setSelectedKeys(['0-0']);
      }, [treeData]);
    
      return (
        <Tree
          treeData={treeData}
          defaultSelectedKeys={selectedKeys}
        />
      );
    }
    
    export default MyTree;
    

    这样,在每次treeData发生变化时,都会重新设置defaultSelectedKeys的值为['0-0']

    希望能帮到您!如果还有其他问题,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^