From b94089df9d5780f3ffbc83dbf56f56d43c72983d Mon Sep 17 00:00:00 2001 From: "Sun, Zhicheng" <76943068+Sunnan1998@users.noreply.github.com> Date: Wed, 16 Sep 2026 09:55:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(table-render):=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=BA=90=E4=B8=AD=E7=9A=84=20React=20=E5=85=83=E7=B4=A0?= =?UTF-8?q?=E8=A2=AB=20object=20=E5=88=A4=E6=96=AD=E5=90=9E=E6=8E=89?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E5=8D=95=E5=85=83=E6=A0=BC=E7=A9=BA=E7=99=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 问题 closes #1639 当 dataSource 的字段值直接是 JSX(为保持 columns 配置纯净,把渲染内容放在数据源中)时, 单元格渲染为空。 ## 原因 `renderDom` 中 `if (typeof val === 'object') return;` 未区分普通对象与 React 元素。 React 元素本质是对象,因此会命中该分支并返回 undefined。 ## 方案 在 object 判断前加入 `React.isValidElement(val)` 放行,命中则直接返回该元素。 - 位置选在 `renderTags` 之后、object 判断之前,为最小侵入点 - `item.enum` 分支已有 `!isObject(val)` 守卫,React 元素原本不会进入,无冲突 - 对既有非元素值的行为完全无变更 --- packages/table-render/src/core/TableView/field.tsx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/table-render/src/core/TableView/field.tsx b/packages/table-render/src/core/TableView/field.tsx index 08169b3a9..0c4b0ba25 100644 --- a/packages/table-render/src/core/TableView/field.tsx +++ b/packages/table-render/src/core/TableView/field.tsx @@ -150,6 +150,12 @@ export const renderDom = (value: any, item: any, extra ?: { record: any, index: return renderTags(val, item); } + // 数据源中直接传入 JSX 时,React 元素本身是对象, + // 需在 object 判断前放行,否则会被下方分支吞掉导致单元格空白 + if (React.isValidElement(val)) { + return val; + } + if (typeof val === 'object') { return; }