Usage
import { useMultiStateValidator } from '@ts-hooks-kit/core'
function Example() {
const result = useMultiStateValidator()
return <pre>{JSON.stringify(result, null, 2)}</pre>
}
API
function useMultiStateValidator(states: S[], validator: ValidatorFn<S>): V
Custom hook that validates multiple states at once.
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
states | S[] | - | Array of states to validate. |
validator | ValidatorFn<S> | - | Function that receives all states and returns validation result. |
Returns
The validation result.
Type declaration
UseMultiStateValidatorReturn
The hook return type.
ValidatorFn
The validator function type.
Hook
import { useCallback, useEffect, useRef, useState } from 'react'
/** The validator function type. */
export type ValidatorFn<S> = (...states: S[]) => unknown
/** The hook return type. */
export type UseMultiStateValidatorReturn<V> = V
/**
* Custom hook that validates multiple states at once.
* @param {S[]} states - Array of states to validate.
* @param {ValidatorFn<S>} validator - Function that receives all states and returns validation result.
* @returns {UseMultiStateValidatorReturn<V>} The validation result.
* @public
* @see [Documentation](https://react-use.vercel.app/useMultiStateValidator)
* @example
* ```tsx
* const isValid = useMultiStateValidator(
* [email, password, confirmPassword],
* (email, password, confirm) => email.includes('@') && password.length >= 8 && password === confirm
* );
* ```
*/
export function useMultiStateValidator<S, V>(
states: S[],
validator: ValidatorFn<S>
): UseMultiStateValidatorReturn<V> {
const [result, setResult] = useState<V>(() =>
validator(...states) as V
)
const validatorRef = useRef(validator)
validatorRef.current = validator
useEffect(() => {
setResult(validatorRef.current(...states) as V)
}, [states])
return result
}