用途
本技能用于指导在 React 应用中使用 Context 模式进行状态管理,核心目标是解决 prop drilling 问题:当需要把 props 逐层传递穿过多个并不使用这些数据的组件、只为到达深层嵌套组件时,可以使用 Context 在组件树之间直接共享值,而无需在每一层显式传递 props。
主要能力
资料中给出的模式包括:
- Prop drilling 与 Context 的对比:展示逐层传递 props 的写法(应避免)与使用 Context Provider 的写法(更优)。
- 使用 TypeScript 创建与使用 Context:以 AuthContext 为例,定义 User、AuthContextType 接口,通过 createContext 创建上下文,在 AuthProvider 中提供 login、logout、isAuthenticated、isLoading 等值,并导出 useAuth 自定义 Hook,在 Provider 之外使用时抛出错误。
- 结合 useReducer 处理复杂状态:以购物车为例,定义 CartItem、State、Action 类型,编写 cartReducer 处理 ADD_ITEM、REMOVE_ITEM、UPDATE_QUANTITY、CLEAR_CART,并通过 CartProvider 提供 state 与 dispatch,另提供 useCartActions 辅助 Hook 封装动作。
- 多 Context 组合:通过 AppProviders 将 AuthProvider、ThemeProvider、CartProvider、NotificationProvider 嵌套组合。
- 性能优化:拆分 Context:将读与写操作拆分为 UserStateContext 与 UserDispatchContext,并用 useMemo 记忆 dispatch,减少不必要的重渲染。
- 使用 useMemo 保持 value 稳定:以 ThemeContext 为例,用 useMemo 包装 value,避免不必要的重渲染。
- Context 与 localStorage 持久化:以 SettingsContext 为例,初始化时从 localStorage 读取,变更时写回。
- 功能开关(Feature Flags)Context:通过 FeatureFlagsProvider 传入 flags,并提供 useFeatureFlags 与 useFeatureFlag。
- 通知/Toast 系统 Context:管理 notifications 列表,提供 addNotification、removeNotification,并支持按 duration 自动移除。
- 模态框管理 Context:提供 isOpen、modalContent、openModal、closeModal,并处理关闭动画延迟清空内容。
- 表单状态管理 Context:提供 formData、errors、setFieldValue、setFieldError、clearErrors、resetForm 等。
使用方式
资料以代码示例形式展示各模式的实现方式,包括 createContext、Provider 组件、自定义 Hook(如 useAuth、useCart、useTheme、useSettings、useFeatureFlags、useNotifications、useModal)的编写与调用方式。具体安装命令、依赖版本、运行步骤在资料中暂未提供。
适用场景
适用于需要在组件树中共享状态、避免 prop drilling 的 React 应用,例如认证状态、主题、购物车、设置持久化、功能开关、通知提示、模态框和表单状态等场景。
限制
资料未提供该技能的安装方式、依赖要求、版本兼容性、性能基准或收费信息,这些内容暂未提供。