Functional Programming in React 是一份面向 React 开发者的函数式编程实践指南,结合 fp-ts 库给出可直接使用的代码模式。资料强调「不讲术语,只给能跑起来的代码」,适用于 React 18/19 以及 Next.js 14/15。
用途
该技能用于在 React 应用中落地函数式编程范式,帮助开发者以类型更明确、状态更可控的方式处理常见的 UI 状态与副作用问题。
主要能力(按模式划分)
- Option:当值可能缺失时使用,例如用户尚未加载。用 Option 替代 null | undefined 以表达更清晰的意图。资料给出基础 useState 用法,以及通过 O.flatMap、O.map、O.getOrElse 串联可选值的示例。
- Either:用于可能失败的操作,例如表单校验。Left 表示错误,Right 表示有效数据。资料包含简单表单校验、收集全部错误(借助 sequenceS、getSemigroup、getApplicativeValidation)、以及字段级错误(FieldErrors)等写法。
- TaskEither:用于可能失败的异步操作,适合 API 调用。资料给出将 fetch 包装为 TaskEither 的方式(TE.tryCatch)、自定义 useFetch hook、串联 API 调用(TE.flatMap)、以及并行调用(sequenceT 配合 TE.ApplyPar)。
- RemoteData:用于展示加载、错误、成功状态。资料定义了一个四态状态机(NotAsked、Loading、Failure、Success),并提供构造函数、fold 模式匹配、useRemoteData hook,并说明其相较布尔组合(data/loading/error)可避免不可能状态。
- 引用稳定性:fp-ts 值(如 O.some(1))每次渲染都会创建新对象,React 会视为「已变化」。资料给出两种方案:用 useMemo 记忆化,或使用 fp-ts-react-stable-hooks(npm install fp-ts-react-stable-hooks)并配合 useStableO、useStableEffect 与 Eq。
- 依赖注入:用 ReaderTaskEither 配合 React Context 实现可测试组件。资料定义了 AppDependencies 接口(api.getUser、api.updateUser、analytics.track),给出 DepsContext、AppProvider、useDeps,以及使用 mock 依赖进行测试的示例。
- React 19 模式:包括用 use() 处理 Promise(配合 Suspense)、useActionState 处理表单(结合 Either 校验)、useOptimistic 实现即时反馈。
- 速查表:汇总基于 Option 的渲染(match、fold、getOrElse)与基于 Either 的渲染等常见写法。
使用方式
资料以代码示例为主,覆盖状态管理、表单校验、数据获取、异步状态建模、依赖注入与测试。开发者可按照对应场景选择模式,将示例中的函数与 hook 直接应用到自己的 React 组件中。
适用场景
适合需要在 React 18/19 或 Next.js 14/15 项目中引入 fp-ts、希望以更明确的类型建模状态与错误、并关注可测试性的前端开发场景。
限制
资料未提供关于收费、价格、平台支持范围、性能效果或安装完整步骤的说明;部分内容(如具体 npm 包版本、完整项目配置)暂未提供。