React Safe Action (react-zod-safe-action)
A type-safe action handler for React applications with built-in form validation using Zod.
Features
- 🛡️ Type-safe actions with TypeScript
- ✅ Built-in form validation using Zod
- 🎯 Simple and intuitive API
- 🔄 Handles loading and error states
- 💪 Zero dependencies (except peer dependencies)
Installation
npm install react-zod-safe-action
yarn add react-zod-safe-action
pnpm add react-zod-safe-action
Usage
1. Define your action
import { SafeAction } from "react-zod-safe-action";
import { z } from "zod";
export const actionClient = new SafeAction();
const loginSchema = z.object({
email: z.string().email(),
password: z.string().min(8)
});
const loginAction = actionClient.schema(loginSchema).action(async (data) => {
return { success: true };
});
2. Use the action in your component
import { useAction } from "react-zod-safe-action";
function LoginForm() {
const { execute, status, loading } = useAction(loginAction, {
onSuccess: (data) => {
console.log("Login successful", data);
},
onError: ({ error, input }) => {
console.log("Login failed", error);
}
});
const handleSubmit = (e) => {
e.preventDefault();
execute({
email: "user@example.com",
password: "password123"
});
};
return <form onSubmit={handleSubmit}>{/* Your form elements */}</form>;
}
API Reference
SafeAction
Creates a new safe action with optional schema validation.
const actionClient = new SafeAction();
actionClient.schema(zodSchema).action((data) => Promise<Result>);
useAction
Hook to execute the safe action and manage its state.
const {
execute,
status,
loading,
result,
reset
} = useAction(action, {
onSuccess?: (data: Result) => void,
onError?: (error: {
error: {
validation: Record<string, string>,
request: Record<string, string>
},
input: Input
}) => void
});
Error Handling
react-zod-safe-action provides structured error handling for both validation and request errors:
{
validation: {
'field.path': 'error message'
},
request: {
'error_key': 'error message'
}
}
License
MIT