From bbfeaaac91769145a03dec0386e356e2d35c7feb Mon Sep 17 00:00:00 2001 From: liquid Date: Fri, 23 Jan 2026 00:13:35 +0800 Subject: [PATCH] =?UTF-8?q?fix(popup-toolbar):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=A4=9A=E9=80=89=E5=85=83=E7=B4=A0=E6=97=B6=E5=A1=AB=E5=85=85?= =?UTF-8?q?=E8=89=B2=E5=9B=BE=E6=A0=87=E6=98=BE=E7=A4=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复内联 style undefined 覆盖 CSS 类导致杂色图标不显示的问题 - 修复 BackgroundColorIcon 作为函数传递导致 React 警告 - 填充色杂色样式改用环形渐变,与线条杂色表示一致 - 添加相关编码规则到文档 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- CLAUDE.md | 2 + docs/CODING_RULES.md | 58 +++++++++++++++++++ .../toolbar/popup-toolbar/fill-button.tsx | 2 +- .../toolbar/popup-toolbar/popup-toolbar.scss | 22 ++++--- .../toolbar/popup-toolbar/popup-toolbar.tsx | 33 ++++++----- 5 files changed, 93 insertions(+), 24 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 0f72a01f..d0e32f2a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -174,6 +174,8 @@ import { quickInsert } from '../../../services/canvas-operations'; 2. Hover 延迟操作需要正确的计时器清理 3. 第三方窗口需用 `createPortal` 保持 React 事件流 4. 图标组件使用 `React.FC`,支持 `size` 属性 +5. 传递组件作为 prop 时必须实例化:`icon={}` 而非 `icon={Icon}` +6. 内联 style 的 `undefined` 值会覆盖 CSS 类,需要 CSS 类生效时传 `style={undefined}` ### 缓存规则 diff --git a/docs/CODING_RULES.md b/docs/CODING_RULES.md index b681abe6..619340be 100644 --- a/docs/CODING_RULES.md +++ b/docs/CODING_RULES.md @@ -526,6 +526,64 @@ const openDialog = (dialogType: DialogType) => { - 函数式更新 `setState(prev => ...)` 保证 `prev` 始终是最新状态 - 这个问题在多个弹窗/抽屉同时打开时特别容易出现 +#### 传递 React 组件作为 prop 时必须实例化 + +**场景**: 将 React 组件作为 `icon` 或其他 prop 传递给子组件时 + +❌ **错误示例**: +```typescript +// 错误:传递组件函数本身,而不是 JSX 实例 +import { BackgroundColorIcon } from './icons'; + +const icon = !hexColor ? BackgroundColorIcon : undefined; + +// 子组件中渲染时: +// {icon} → React 警告 "Functions are not valid as a React child" +``` + +✅ **正确示例**: +```typescript +// 正确:传递 JSX 实例 +import { BackgroundColorIcon } from './icons'; + +const icon = !hexColor ? : undefined; + +// 子组件中渲染时: +// {icon} → 正常渲染 +``` + +**原因**: React 组件本质上是函数,直接将函数作为子元素传递会导致 React 警告。需要调用组件(``)生成 JSX 元素后再传递。 + +#### 内联 style 的 undefined 值会覆盖 CSS 类样式 + +**场景**: 当需要条件性地应用内联样式,同时使用 CSS 类作为备选样式时 + +❌ **错误示例**: +```typescript +// 错误:style 对象中的 undefined 值会覆盖 CSS 类的 background +