DEV Community

Davi Orlandi
Davi Orlandi

Posted on

1

Tipagem segura e Eficiência com next-safe-action no Next.js

Segurança e Eficiência com next-safe-action no Next.js

O next-safe-action é uma biblioteca poderosa para fortalecer a segurança e eficiência das Server Actions no Next.js, garantindo tipagem consistente e validação robusta para aplicações que utilizam o App Router.

📌 O que é o next-safe-action?

Essa biblioteca foi criada para evitar problemas comuns ao trabalhar com Server Actions, como dados não validados, erros silenciosos e tipagem inconsistente entre o backend e o frontend.

🔥 Principais Benefícios:

API simples e intuitiva – fácil de integrar e usar.

Segurança de tipos de ponta a ponta – evita erros de tipagem na comunicação entre cliente e servidor.

Validação com Zod e outras bibliotecas – garante que apenas dados corretos sejam processados.

Suporte a formulários (Form Actions) – facilita a submissão e tratamento de formulários.

Middleware para autenticação e logs – permite adicionar camadas de segurança adicionais.

Tratamento avançado de erros – fornece um fluxo estruturado para capturar erros e notificá-los corretamente.

Otimizações na UI (atualizações otimistas) – melhora a experiência do usuário ao refletir mudanças instantaneamente.


🚀 Como Usar o next-safe-action no Next.js

1️⃣ Instalando a Biblioteca

Se você usa Zod para validação (recomendado), instale os pacotes necessários:

npm install next-safe-action zod
Enter fullscreen mode Exit fullscreen mode

2️⃣ Criando um Cliente de Ação

No seu projeto, crie um cliente para centralizar as Server Actions.

// lib/safe-action.ts
import { createSafeActionClient } from 'next-safe-action';

export const actionClient = createSafeActionClient();
Enter fullscreen mode Exit fullscreen mode

3️⃣ Definindo uma Server Action com Validação

Aqui criamos uma ação que atualiza um usuário, garantindo que os dados estejam corretos antes do processamento.

'use server';

import { z } from 'zod';
import { actionClient } from '@/lib/safe-action';

const UserSchema = z.object({
  id: z.string(),
  name: z.string().min(2, 'Nome muito curto'),
  email: z.string().email('E-mail inválido'),
});

export const updateUserAction = actionClient
  .schema(UserSchema)
  .action(async ({ parsedInput }) => {
    const { id, name, email } = parsedInput;

    // Simulando uma atualização no banco
    console.log(`Atualizando usuário ${id}: ${name} (${email})`);

    return { message: 'Usuário atualizado com sucesso!' };
  });
Enter fullscreen mode Exit fullscreen mode

4️⃣ Consumindo a Server Action no Frontend

Agora, utilizamos essa ação em um formulário React.

'use client';

import { useAction } from 'next-safe-action';
import { updateUserAction } from '@/actions/user-actions';

function UserForm() {
  const { execute, result } = useAction(updateUserAction);

  const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {
    event.preventDefault();
    const formData = new FormData(event.currentTarget);
    await execute(Object.fromEntries(formData));
  };

  return (
    <form onSubmit={handleSubmit}>
      <input name="id" type="text" placeholder="ID do usuário" required />
      <input name="name" type="text" placeholder="Nome" required />
      <input name="email" type="email" placeholder="E-mail" required />
      <button type="submit">Atualizar</button>
      {result?.data && <p>{result.data.message}</p>}
      {result?.validationErrors && (
        <ul>
          {Object.entries(result.validationErrors).map(([field, errors]) => (
            <li key={field}>{`${field}: ${errors.join(', ')}`}</li>
          ))}
        </ul>
      )}
    </form>
  );
}
Enter fullscreen mode Exit fullscreen mode

💡 Conclusão

O next-safe-action facilita o uso seguro e eficiente das Server Actions no Next.js, garantindo tipagem forte, validação confiável e experiência do usuário aprimorada. Se você está construindo aplicações modernas, essa biblioteca é uma excelente adição ao seu stack! 🚀

AWS Q Developer image

Your AI Code Assistant

Implement features, document your code, or refactor your projects.
Built to handle large projects, Amazon Q Developer works alongside you from idea to production code.

Get started free in your IDE

Top comments (0)

Qodo Takeover

Introducing Qodo Gen 1.0: Transform Your Workflow with Agentic AI

Rather than just generating snippets, our agents understand your entire project context, can make decisions, use tools, and carry out tasks autonomously.

Read full post

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay