المهارات fp-ts-react
📦

fp-ts-react

آمن

使用 fp-ts 模式构建类型安全的 React 应用

在 React 中管理状态、错误和异步操作通常会因为空值或未处理的失败而导致 bug。本技能提供实用的 fp-ts 模式,用于类型安全的状态管理、带错误收集的表单验证,以及可靠的异步数据获取。

يدعم: Claude Codex Code(CC)
🥉 74 برونزي
1

تنزيل ZIP المهارة

2

رفع في Claude

اذهب إلى Settings → Capabilities → Skills → Upload skill

3

فعّل وابدأ الاستخدام

اختبرها

استخدام "fp-ts-react". 用户提交注册表单,邮箱无效且密码过短

النتيجة المتوقعة:

  • 表单同时显示两个错误消息:
  • - 邮箱地址无效
  • - 密码必须至少 8 个字符
  • 在所有验证通过之前不会提交表单数据

استخدام "fp-ts-react". 仪表板组件并行获取用户资料、统计数据和通知

النتيجة المتوقعة:

  • 初始状态显示加载旋转器
  • 所有三个 API 请求并发执行
  • 成功状态显示包含用户信息、指标和通知列表的完整仪表板
  • 如果任何请求失败,错误状态会显示并提供重试选项

التدقيق الأمني

آمن
v1 • 2/25/2026

All 91 static analysis findings are false positives. The SKILL.md file is documentation containing TypeScript code examples in markdown format. Detected 'external_commands' are markdown backtick code blocks, not shell execution. Network findings reference example URLs in documentation. No executable code or actual security risks present.

1
الملفات التي تم فحصها
797
الأسطر التي تم تحليلها
0
النتائج
1
إجمالي عمليات التدقيق
لا توجد مشكلات أمنية
تم تدقيقه بواسطة: claude

درجة الجودة

38
الهندسة المعمارية
100
قابلية الصيانة
87
المحتوى
50
المجتمع
100
الأمان
91
الامتثال للمواصفات

ماذا يمكنك بناءه

带错误收集的表单验证

验证注册表单,一次性显示所有字段错误,而不是逐个显示。使用 Either 与应用式验证,同时收集邮箱、密码和姓名字段的错误。

带正确状态处理的 API 数据获取

使用 RemoteData 类型替换布尔标志(isLoading、isError、data),强制使用四种精确状态:NotAsked、Loading、Failure、Success。消除不可能的状态组合。

类型安全的可选用户数据

使用 Option 类型代替空检查来处理登录/登出 UI 状态。对用户存在性进行模式匹配,实现更清晰的条件渲染,无需 undefined 防护子句。

جرّب هذه الموجهات

处理缺失值的基础 Option 模式
展示如何在 React 中使用 fp-ts Option 类型来处理可能尚未加载的用户个人资料。包含 useState hook,并使用 O.match 进行模式匹配以渲染不同的 UI 状态。
收集所有错误的表单验证
使用 fp-ts Either 创建注册表单验证,一次性显示所有验证错误。验证邮箱格式、密码长度(8 个字符以上)和必填姓名字段。使用 sequenceS 组合验证器。
使用 TaskEither 进行 API 调用的自定义 Hook
编写 useFetch 自定义 hook,使用 fp-ts TaskEither 包装 fetch API。处理 HTTP 错误、加载状态,并提供类型安全的结果。展示如何使用 flatMap 链接多个 API 调用。
复杂异步 UI 的 RemoteData 状态机
为 React 实现 RemoteData 模式,包含四种状态:NotAsked、Loading、Failure、Success。创建 fold 函数对所有状态进行模式匹配,并展示完整的 UserProfile 组件,在挂载时获取数据。

أفضل الممارسات

  • 使用 useMemo 防止不必要的重新渲染,当创建 fp-ts 值(如 O.some())时,每次渲染都会生成新的引用
  • 优先使用 RemoteData 而不是独立的 loading/error/data 布尔值,在类型级别消除不可能的状态组合
  • 对表单使用带应用式验证(sequenceS)的 Either,显示所有字段错误而不是在第一个错误处失败

تجنب

  • 不要直接将 fp-ts Option、Either、TaskEither 用作 React 依赖数组值而不经 memoization - 它们每次渲染都会创建新引用
  • 避免在同一代码库中混合使用 null/undefined 检查与 Option - 完全采用 fp-ts 模式以保持一致性
  • 不要将 TaskEither 用于同步操作 - 将其保留给可能失败的异步操作,对同步验证使用 Either

الأسئلة المتكررة

什么是 fp-ts,为什么要与 React 一起使用?
fp-ts 是一个用于 TypeScript 的函数式编程库,提供类型如 Option(用于缺失值)、Either(用于错误)和 TaskEither(用于异步操作)。它为常见的 React 模式带来类型安全,在编译时而非运行时捕获 bug。
fp-ts 的学习曲线对 React 项目来说值得吗?
对于熟悉 TypeScript 和函数式编程的团队,fp-ts 可以减少运行时错误并提高代码清晰度。对于更简单的项目,增加的复杂性可能不值得。在采用 TaskEither 和 ReaderTaskEither 之前,先从 Option 和 Either 开始。
RemoteData 相比带 loading 和 error 标志的 useState 有什么改进?
RemoteData 将四种有效状态(NotAsked、Loading、Failure、Success)编码为可辨识联合。这可以防止不可能的状态,例如 loading=true 同时 error 被设置,而使用独立的布尔标志时这种情况是可能的。
我可以在 React Server Components 中使用 fp-ts 模式吗?
可以。Option、Either 和其他同步 fp-ts 类型在服务端组件中运行良好。TaskEither 的相关性较低,因为 RSC 以不同方式处理异步,但 Either 的验证模式对表单处理仍然有用。
推荐哪些 fp-ts React hooks 库?
使用 fp-ts-react-stable-hooks 获取引用稳定的 hooks,这些 hooks 理解 fp-ts 相等性。这可以防止在使用 fp-ts 值作为依赖项时发生不必要的重新渲染。对于 RemoteData,@devexperts/remote-data-ts 提供了带有实用工具的类型。
如何在 React 中使用 fp-ts 处理依赖注入?
将 React Context 与 ReaderTaskEither 结合使用。定义包含服务(API、分析等)的 AppDependencies 接口,通过 Context 提供它,并使用 ReaderTaskEither 组合依赖这些服务的操作,同时保持组件可测试。

تفاصيل المطور

المؤلف

sickn33

الترخيص

MIT

مرجع

main

بنية الملفات

📄 SKILL.md