<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hernán Arica</title>
    <description>The latest articles on DEV Community by Hernán Arica (@hernanarica).</description>
    <link>https://dev.to/hernanarica</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F735542%2F73170988-27c2-448a-8359-20bac9128278.JPG</url>
      <title>DEV Community: Hernán Arica</title>
      <link>https://dev.to/hernanarica</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hernanarica"/>
    <language>en</language>
    <item>
      <title>Cómo configurar React + Typescript en una aplicación laravel con inertia</title>
      <dc:creator>Hernán Arica</dc:creator>
      <pubDate>Thu, 09 May 2024 09:39:53 +0000</pubDate>
      <link>https://dev.to/hernanarica/como-configurar-react-typescript-en-una-aplicacion-laravel-con-inertia-5an6</link>
      <guid>https://dev.to/hernanarica/como-configurar-react-typescript-en-una-aplicacion-laravel-con-inertia-5an6</guid>
      <description>&lt;ol&gt;
&lt;li&gt;Instalar dependencias de ts.&lt;/li&gt;
&lt;li&gt;Crear archivo tsconfig.json y su configuración.&lt;/li&gt;
&lt;li&gt;Crear el archivo de definición para vite/client.&lt;/li&gt;
&lt;li&gt;Importante!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Lo primero
&lt;/h2&gt;

&lt;p&gt;Doy por sentado que ya tenés configurado inertia con react para un proyecto laravel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalar dependencias de ts
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;npm install -D typescript @types/react @types/react-dom&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si estas usando docker, recordá anteponer el "sail"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Crear tsconfig.json
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;touch tsconfig.json&lt;/code&gt;&lt;br&gt;
En esta parte la configuración es más a gusto, peor te paso la mía&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "compilerOptions": {
    "target": "es5",
    "lib": ["dom", "dom.iterable", "esnext"],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "bundler",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve",
    "allowImportingTsExtensions": true,
    "paths": {
      "@/*": ["./resources/js/*"]
    }
  },
  "include": ["resources/js/**/*.ts", "resources/js/**/*.tsx", "resources/js/**/*.d.ts", "vite.config.ts"],
  "exclude": ["node_modules"]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Crear el archivo de definición
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ./recources/js
echo "/// &amp;lt;reference types="vite/client" /&amp;gt;" &amp;gt; vite-env.d.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al momento de crearlo también hay que agregarle el comentario especial&lt;/p&gt;

&lt;h2&gt;
  
  
  Importante
&lt;/h2&gt;

&lt;p&gt;Al hacer un &lt;code&gt;npm run build&lt;/code&gt;, tenés que importar el build con un &lt;code&gt;type=module&lt;/code&gt;, ejemplo:&lt;br&gt;
&lt;code&gt;&amp;lt;script type="module" src="{{ asset("build/assets/app-tX21Cx8Q.js") }}"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Sin nada más que decir, espero que les sea de ayuda esta guía.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React router + Manejo de roles + Autenticación</title>
      <dc:creator>Hernán Arica</dc:creator>
      <pubDate>Fri, 16 Jun 2023 19:02:41 +0000</pubDate>
      <link>https://dev.to/hernanarica/react-router-manejo-de-roles-autenticacion-1imc</link>
      <guid>https://dev.to/hernanarica/react-router-manejo-de-roles-autenticacion-1imc</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;Si eres de las personas que necesitan realizar una aplicación en la cual hay un sistema de autenticación y necesitas mostrar "X" vista dependiendo del rol, este es tu lugar.&lt;br&gt;
Lo primero es decirte que tecnologias uso en el ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 18.2.0&lt;/li&gt;
&lt;li&gt;react-router-dom 6.12.0&lt;/li&gt;
&lt;li&gt;zustand 4.3.8&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Lo primero
&lt;/h2&gt;

&lt;p&gt;No voy a ahondar mucho en el proceso de login, manejo del estado global etc, ire directo al grano, en este ejemplo tenemos un usuario que cuando se general el login, se popula con sus respectivos datos, y al hacer logout, ese usuario queda en null, la info del usuario se guarda en localStorage y se recupera al momento de inicializar el manejador de estado global, asi tendremos disponible de primera mano su información.&lt;/p&gt;

&lt;h2&gt;
  
  
  Estructura del proyecto (De ejemplo)
&lt;/h2&gt;

&lt;p&gt;Dentro de la carpeta &lt;strong&gt;src&lt;/strong&gt;, tenemos otra llamada &lt;strong&gt;router&lt;/strong&gt;, en router pondremos todos nuestros routers, por ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0g546dut0zfbt0p16mz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv0g546dut0zfbt0p16mz.png" alt="Image description" width="392" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro de cada archivo armaremos nuestro router para cada rol, con createBrowserRouter() y generamos la instancia del RouterProvider pasandole nuestras routes como en el ejemplo con AdminRoutes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qeaejg0u9fojao9zqfu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qeaejg0u9fojao9zqfu.png" alt="Image description" width="800" height="1120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Manejo del rol
&lt;/h2&gt;

&lt;p&gt;Por ultimo en la carpeta routes, crear un archivo AppRouter, el cual se encargará de mostrar el rol correspondiente de un usuario, segun su rol, gracias a que con la ayuda de un manejador de estado global, ya tenemos esa info de antemano:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4y82bj4fuqp8ckmfk802.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4y82bj4fuqp8ckmfk802.png" alt="Image description" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como pueden ver, si no hay role definido, muestra el PublicRouter el cual contiene en mi caso, solo un router con una vista de login. Este componente AppRouter deben montarlo en el componente raiz, main.&lt;/p&gt;

&lt;p&gt;Sin nada más que decir, espero que les sea de ayuda este ejemplo.&lt;/p&gt;

</description>
      <category>react</category>
      <category>reactrouter</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
