You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中react-data-table内TreeNode组件onClick事件失效问题

问题解决:react-data-table中TreeNode点击事件失效

问题原因

核心问题出在不稳定的组件key值:

  • FolderTree渲染TreeNode时,使用了node.id + Math.floor(Math.random() * 10000)作为key,每次组件渲染都会生成新的随机数,导致React持续销毁并重建TreeNode实例。
  • 频繁的组件重建会导致事件绑定失效、状态丢失,而react-data-table的行渲染机制(如虚拟滚动、重渲染优化)会放大这个问题,表格外渲染频率低所以问题不明显。
  • 另外,NetworkSharesTree中生成node.id时添加随机数的操作完全多余,反而破坏了id的稳定性。

解决方案

1. 修复FolderTree的key值

使用稳定且唯一的node.id作为key,移除随机数:

import React from "react";
import TreeNode from "./TreeNode";
const FolderTree = ({ data }) => {
  return (
    <div>
      {data.map((node) => (
        <TreeNode
          key={node.id} // 仅使用稳定的node.id
          node={node}
        />
      ))}
    </div>
  );
};

export default FolderTree;

2. 生成稳定的node.id

修改NetworkSharesTree中convertToArboristFormat函数的id生成逻辑,确保每个节点id唯一且固定:

const newItem = {
  // 用path(天然唯一)或name+索引组合生成稳定id
  id: item.path ? item.path : `${item.name}-${index}`,
  name: item.path ? item.path : item.name,
  children: item?.type === "directory" ? [] : null,
};

验证逻辑

React通过key值追踪组件身份,稳定的key能让React复用已有组件实例,保证事件绑定和状态的持续性。修改后,TreeNode不会被频繁重建,onClick事件就能正常触发折叠/展开逻辑。

内容的提问来源于stack exchange,提问作者Tarik DEGIRMENCI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 02:04:54