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 +