Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Plantilla de React Lista y Configurada

πŸ“Œ Contacto

πŸ“Œ Portafolio: astralzz.io
πŸ“© Email: edain.cortez@outlook.com
πŸ“± Telegram: t.me/lAstralz
πŸ”— LinkedIn: linkedin.com/in/Edain
😺 GitHub: github.com/Astralzz


πŸ“Œ IntroducciΓ³n

Esta plantilla estΓ‘ optimizada para el desarrollo de aplicaciones en React, con herramientas modernas preconfiguradas para agilizar el desarrollo y despliegue.

πŸ“¦ LibrerΓ­as Incluidas

  • React Router: gestiΓ³n de rutas.
  • Redux Toolkit: gestiΓ³n del estado.
  • Tailwind CSS 4.0: estilos rΓ‘pidos y eficientes.
  • Sass: preprocesador de estilos.
  • Docker: configuraciΓ³n para facilitar el despliegue.
  • Vite: bundler para un desarrollo mΓ‘s rΓ‘pido.
  • Formik: gestiΓ³n de formularios y validaciones.
  • Yup: validaciΓ³n de esquemas en tiempo de ejecuciΓ³n.
  • Axios: Realizar consulta XMLHttpRequests, HTTPS, etc.

βš™οΈ Configuraciones Realizadas

  • TypeScript: ya configurado en toda la app para una mejor experiencia de desarrollo.
  • React Router: preconfigurado en src/router.tsx.
  • Redux Toolkit: configuraciΓ³n lista en src/redux/, incluyendo store y middleware.
  • Tailwind CSS 4.0: configurado en src/main.css.
  • Tema: gestiΓ³n de tema en src/redux/slices/themeSlice.ts, integrado con Redux.
  • Formik & Yup: formulario con validaciones listo para usar.
  • PΓ‘gina 404: ya implementada y funcional.
  • Modal: implementado y listo para usar en src/components/modals/ModalDefault.tsx
  • Api & Request Se creo un ejemplo del uso de una api en react 19 en src/pages/ApiPage.tsx

πŸ“– Tutoriales

  • Despliegue con Docker: consulta docs/tutorials/docker-tutorial.md para aprender a configurar y desplegar con Docker.

πŸ“‚ Estructura del Proyecto

πŸ“ app
 β”œβ”€β”€ πŸ“ docker
 β”‚    └── app.dockerfile
 β”œβ”€β”€ πŸ“ public
 β”‚    └── vite.svg
 β”œβ”€β”€ πŸ“ src
 β”‚    β”œβ”€β”€ πŸ“ apis
 β”‚    β”œβ”€β”€ App.tsx
 β”‚    β”œβ”€β”€ πŸ“ assets
 β”‚    β”‚    └── react.svg
 β”‚    β”œβ”€β”€ πŸ“ components
 β”‚    β”‚    β”œβ”€β”€ πŸ“ err
 β”‚    β”‚    β”œβ”€β”€ πŸ“ forms
 β”‚    β”‚    β”‚    └── EmailForm.tsx
 β”‚    β”‚    β”œβ”€β”€ πŸ“ inputs
 β”‚    β”‚    β”‚    └── InputDefault.tsx
 β”‚    β”œβ”€β”€ main.css
 β”‚    β”œβ”€β”€ main.tsx
 β”‚    β”œβ”€β”€ πŸ“ pages
 β”‚    β”‚    └── NotFoundPage.tsx
 β”‚    β”œβ”€β”€ πŸ“ redux
 β”‚    β”‚    β”œβ”€β”€ hook.ts
 β”‚    β”‚    β”œβ”€β”€ πŸ“ slices
 β”‚    β”‚    β”‚    └── themeSlice.ts
 β”‚    β”‚    β”œβ”€β”€ store.ts
 β”‚    β”œβ”€β”€ router.tsx
 β”‚    β”œβ”€β”€ πŸ“ styles
 β”‚    β”‚    └── app.scss
 β”‚    β”œβ”€β”€ πŸ“ tests
 β”‚    β”œβ”€β”€ vite-env.d.ts
 β”œβ”€β”€ .dockerignore
 β”œβ”€β”€ .gitignore
 β”œβ”€β”€ docker-compose.yml
 β”œβ”€β”€ eslint.config.js
 β”œβ”€β”€ index.html
 β”œβ”€β”€ package-lock.json
 β”œβ”€β”€ package.json
 β”œβ”€β”€ README.md
 β”œβ”€β”€ tsconfig.app.json
 β”œβ”€β”€ tsconfig.json
 β”œβ”€β”€ tsconfig.node.json
 β”œβ”€β”€ vite.config.ts

πŸš€ Uso

πŸ”§ InstalaciΓ³n

  1. Clona este repositorio:

    git clone https://github.com/Astralzz/template-react-full
    cd template-react-full/app
  2. Instala las dependencias:

    npm install
  3. Inicia el entorno de desarrollo:

    npm run dev

πŸ“œ Scripts Útiles

  • npm run dev: Inicia el servidor en modo desarrollo.
  • npm run build: Compila la aplicaciΓ³n para producciΓ³n.
  • npm run preview: Ejecuta la versiΓ³n compilada de la app.
  • npm run lint: Verifica errores en el cΓ³digo.
  • npm run format: Aplica formato automΓ‘tico con Prettier.
  • npm run test: Ejecuta las pruebas automatizadas.

πŸ› οΈ Configuraciones Destacadas

Router Configurado

React Router estΓ‘ listo en src/router.tsx, permitiendo agregar rutas fΓ‘cilmente:

const router = createBrowserRouter([
  {
    path: "/",
    element: <App />,
    errorElement: <NotFoundPage />,
    children: routesApp.map((r) => r.route),
  },
]);

Redux Configurado

Redux Toolkit estΓ‘ preconfigurado con TypeScript en src/redux/, incluyendo el store y los slices:

import { configureStore } from "@reduxjs/toolkit";
import themeSlice from "./slices/themeSlice";

export const store = configureStore({
  reducer: {
    stateTheme: themeSlice,
  },
});

// Tipos de TypeScript
export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

Tailwind CSS 4.0

La configuraciΓ³n de Tailwind estΓ‘ en src/main.css. Se puede personalizar fΓ‘cilmente:

@import "tailwindcss";

@theme {
  --color-primary-50: rgba(245, 245, 245, 1);
  --color-primary-500: rgba(50, 50, 50, 1);
  --color-primary-900: rgba(0, 0, 0, 1);
}

GestiΓ³n de Tema con Redux

El estado del tema se gestiona en src/redux/slices/themeSlice.ts.

import { useReduxSelector } from './redux/hook';

const App: React.FC = () => {
  const theme = useReduxSelector((state) => state.stateTheme.theme);
  return <main className={`${theme}`}></main>;
};

Formularios con Formik & Yup

La validaciΓ³n de formularios estΓ‘ lista en src/components/forms/EmailForm.tsx.

const EmailForm: React.FC = () => {
  // Action form
  const handleSubmit = React.useCallback(
    (
      values: { asunto: string; },
      {
        setSubmitting,
        resetForm,
      }: {
        setSubmitting: (isSubmitting: boolean) => void;
        resetForm: () => void;
      }
    ): void => {
      console.log("Email enviado:", values);
    },
    []
  );

  return (
    <Formik
      initialValues={{ asunto: "", message: "" }}
      validationSchema={validationSchema}
      onSubmit={handleSubmit}
    >
      {/* EstΓ‘ enviando, Es vΓ‘lido, Sucio */}
      {({ isSubmitting, isValid, dirty }) => (
        <Form className="m-9 text-sm max-w-sm mx-auto p-6 bg-white dark:bg-gray-700 rounded-lg shadow-md">
          {/* Asunto */}
          <InputDefault name="asunto" label="Asunto" maxLength={45} required />
          {/* Button action */}
          <button
            type="submit"
            disabled={isSubmitting || !(isValid && dirty)}
            className="w-full mt-4 hover:cursor-pointer bg-blue-600 hover:bg-blue-700 text-white font-medium py-2 rounded-md transition-colors disabled:bg-gray-400 disabled:cursor-not-allowed"
          >
            {isSubmitting ? "Enviando..." : "Enviar"}
          </button>
        </Form>
      )}
    </Formik>
  );
};

404 Page

Pagina 404 funcionando correctamente en src/redux/slices/themeSlice.ts. se puede cambiar y configurar sin problema.

/**
 * 404 page
 *
 * @returns {JSX.Element}
 */
const NotFoundPage: React.FC = () => {
  // Variables redux
  const theme = useReduxSelector((state) => state.stateTheme.theme);

  return (
    <main className={theme}>
      <div className="bg-primary-100 dark:bg-primary-500 text-gray-900 dark:text-gray-100 w-full flex flex-col items-center text-center justify-center min-h-screen">
        {/* Header */}
        <h1 className="text-6xl font-bold">404</h1>
        {/* Message */}
        <p className="text-xl mt-2">PΓ‘gina no encontrada</p>
        {/* Button */}
        <Link
          to="/"
          className="mt-6 px-5 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition duration-300"
        >
          Volver al inicio
        </Link>
      </div>
    </main>
  );
};

Example Api Page

Pagina de ejemplo del uso de una api usando react 19 y axios

// Component ...
const ApiPage: React.FC = () => {
  // Estados para manejar la data y el estado de error
  const [data, setData] = useState<string | null>(null);
  const [error, setError] = useState<string | null>(null);
  const [isPending, startTransition] = useTransition();

  // FunciΓ³n para manejar la peticiΓ³n
  const handleSubmit = () => {
    // Reseteamos los estados
    setError(null);

    // Inicio
    startTransition(async () => {
      try {
        // PeticiΓ³n a la API
        const response = await getDataRequest();

        // * Success
        setData(JSON.stringify(response, null, 2));

        // ! Error
      } catch (err: unknown) {
        setError(
          err instanceof Error ? err?.message : "OcurriΓ³ un error desconocido"
        );
      }
    });
  };

  return <div></div>;
};
// Request ...
export const getDataRequest = async (): Promise<unknown> => {
  try {
    // Realizar la peticiΓ³n GET
    const response = await axios.get<any>("");

    // Verificar si los datos son vΓ‘lidos
    checkDataRequest(response);

    // Retornar los datos obtenidos
    return response.data;
  } catch (error) {
    return await catchAxiosError(error);
  }
};

πŸ“œ ConclusiΓ³n

Esta plantilla te permite comenzar rΓ‘pidamente con React, Redux, Tailwind, TypeScript y Docker, sin preocuparte por la configuraciΓ³n inicial. πŸš€


About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages