import React, { createContext, useContext } from 'react'; import { FieldValues, ControllerRenderProps, ControllerFieldState, } from 'react-hook-form'; export interface FormFieldContextValue< TFieldValues extends FieldValues = FieldValues > { /** * 字段控制属性 (value, onChange, onBlur, ref) */ field: ControllerRenderProps; /** * 字段状态 (error, isDirty, isTouched, invalid) */ fieldState: ControllerFieldState; /** * 最终的错误信息 */ errorMessage?: string; /** * 是否有错误 */ hasError: boolean; } const FormFieldContext = createContext(null); export interface FormFieldProviderProps< TFieldValues extends FieldValues = FieldValues > { value: FormFieldContextValue; children: React.ReactNode; } export function FormFieldProvider< TFieldValues extends FieldValues = FieldValues >({ value, children }: FormFieldProviderProps) { return ( {children} ); } /** * 用于获取当前表单字段的上下文数据 * 必须在 FormFieldProvider 内部使用 */ export function useFormFieldContext< TFieldValues extends FieldValues = FieldValues >(): FormFieldContextValue { const context = useContext(FormFieldContext); if (!context) { throw new Error( 'useFormFieldContext must be used within a FormFieldProvider' ); } return context as FormFieldContextValue; } export default FormFieldContext;