No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de React.js

Curso de React.js

Juan David Castro Gallego

Juan David Castro Gallego

Feature-First Directories en React

16/34
Recursos

¿Cuál es la estrategia para organizar carpetas en un proyecto React?

Organizar las carpetas de tu proyecto puede ser fundamental para mantener un flujo de trabajo eficiente y claro. En el contexto de un proyecto React, la estructura de carpetas puede variar, pero hay enfoques que mejoran la manejabilidad del código. Una práctica común es crear una carpeta para cada componente, con un archivo index.js dentro, lo que facilita encontrar y gestionar cada componente.

¿Cómo se organiza un archivo de componente?

  1. Crear carpetas por componente: Por cada componente, crea una nueva carpeta con el mismo nombre. Por ejemplo, para el componente TodoCounter, crea una carpeta llamada TodoCounter.
  2. Utiliza un archivo index.js: Dentro de cada carpeta, nombra tu archivo de componente como index.js. Así mantendrás una estructura clara y limpia.
  3. Agrupa los archivos relacionados: Además del archivo index.js, coloca todos los archivos CSS y otros recursos (como imágenes o SVG) relacionados dentro de la misma carpeta.

¿Cuál es la ventaja de usar index.js?

El uso del archivo index.js es una práctica que ofrece dos ventajas clave:

  • Simplicidad en los imports: Al utilizar index.js, cuando importas un componente, solo necesitas referenciar la carpeta, no el archivo específico. Esto reduce el riesgo de errores y simplifica el código.
  • Claridad organizativa: Ofrece una manera clara y coherente de organizar tus componentes y recursos relacionados, asegurando que el código sea fácil de navegar y mantener.

¿Cómo se gestionan los errores al reorganizar las carpetas?

Es común encontrar errores al mover los componentes y sus archivos a nuevas localizaciones. Para lidiar con estos errores, sigue estos pasos:

¿Cómo ajustar los imports?

  1. Modificar las rutas de importación: Al mover archivos, actualiza las rutas de importación según su nueva ubicación. Por ejemplo, si un componente ya no se encuentra en la misma carpeta, modifica la ruta añadiendo ../ para subir un directorio.
  2. Verificación en consola: Después de hacer ajustes en las importaciones, revisa la consola para identificar y corregir cualquier error que pueda surgir.

¿Qué hacer con los warnings de ESLint?

A menudo, ESLint puede dar advertencias, como el uso de == en lugar de ===. Estas advertencias:

  • No son errores: No afectan la ejecución del código inmediatamente, pero es recomendable resolverlas.
  • Soluciones sencillas: Sigue las sugerencias de ESLint para mantener un código limpio y libre de potenciales problemas.

¿Cómo se refactoriza un Custom Hook?

Refactorizar y extraer Custom Hooks puede mejorar la reutilización de código y la lectura del mismo.

¿Cómo se extrae un Custom Hook en un archivo separado?

  1. Crear el archivo del hook: Si tienes un Custom Hook como useLocalStorage, crea un archivo useLocalStorage.js.
  2. Mover el código: Corta y pega el código del hook al nuevo archivo, asegurando que React esté importado correctamente.
  3. Exportar el hook: Utiliza exports nombrados para facilitar su importación en múltiples componentes.
  4. Ajustar las importaciones: Desde el componente donde se utilizaba el hook, cambia la importación para señalar al nuevo archivo del hook.

¿Por qué extraer Custom Hooks?

Extraer Custom Hooks tiene varias ventajas:

  • Reutilización: Permite usar la funcionalidad del hook en diferentes componentes sin duplicar código.
  • Claridad de código: Facilita la lectura y el mantenimiento del código al separar lógica compleja en archivos dedicados.
  • Escalabilidad: Preparación para futuros cambios o ampliaciones sin afectar directamente a los componentes donde se usa el hook.

Con este enfoque, puedes organizar tus proyectos React de manera que el código sea más manejable, claro y fácil de escalar en el futuro. Al adoptar estas prácticas, promueves un ambiente de desarrollo más saludable y eficiente, donde los errores son más fáciles de detectar y corregir. ¡Sigue adelante y aplica estos consejos para mejorar tus habilidades en React!

Aportes 24

Preguntas 3

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Feature First
En este enfoque cada componente de nuestra app sea una carpeta.
A veces sucederá que tenemos un archivo y no sabemos donde ponerlo porque no funciona exactamente igual o veces no tendremos tan claro como se conecta este componente con este otro. Tendremos que darle un vistazo para entender como entra el componente en nuestra aplicación.
con este tendremos muchas carpetas pero con pocos archivos pero cada carpeta va a funcionar independientemente desde el principio y hacer lo que debe dentro de ella. Cada carpeta debe seguir un mismo patrón, saber que nos encontraremos en cada carpeta y tendrems flexibilidad.
Si en una carpeta necesitamos cierta nomeclatura o trabajar de manera diferente al resto de componentes podemos.

En ocasiones es muy “engorroso” tener que actualizar los imports en toda la aplicación, hay editores de código que ayudan y hacen esos cambios en automático, no estoy seguro si VSCode tiene esa opción, en mi caso utilizo ya desde hace tiempo WebStorm y lo hace casi en automático al hacer los movimientos, solo pregunta si lo quiero refactorizar y listo. (Es de paga pero si tienes forma de acreditar que estas estudiando, con un correo electrónico de alguna institución educativa que cuente con carreras afines te dan la licencia gratuita)
Evidentemente la forma más sencilla sería (creo yo) planificar la estructura de carpetas desde el comienzo, aunque es perfectamente entendible que al inicio de este curso no se haya realizado por fines educativos, aunque a veces en el día a día laboral hay ocasiones que tienes que ir moviendo las carpetas para mejorar la experiencia de desarrollo.

Te puse pausa y te gané… jaja 😁

Como dijo el profe Juan, hay varias formas de organizar los archivos en React. La documentación de React (legacy) muestra dos de las formas más populares de organizar archivos: Ordenar por funcionalidad/rutas u Ordenar por tipo de archivo.

Peroooooooo, antes de elegir qué forma de organizar utilizaran, tomen en cuenta el tamaño del proyecto y si van a trabajar en equipo.

Pueden leer más en la documentacion de React: https://legacy.reactjs.org/docs/faq-structure.html

Me gusta Atomic Design

tengo un error y nose como solucionarloCompiled with problems:X ERROR \[eslint] src\App.js Line 21:27: 'useLocalStorage' is not defined no-undef Search for the keywords to learn more about each error.```js Compiled with problems:X ERROR [eslint] src\App.js Line 21:27: 'useLocalStorage' is not defined no-undef Search for the keywords to learn more about each error. ```
Me gusto mucho esta clase, pero yo opte por una pequeña variación de la que usa prode Juan que a mi me gusto mas para separar un poco mas mis archivos. Cree una carpeta llamada Hooks para el customhook y otra Utils donde ocupo una función que elimina acentos y espacios para el buscador de items. ![](https://static.platzi.com/media/user_upload/image-5a92d063-8e76-42af-aa9f-fe9e3322ca67.jpg)
## Filosofías de organización en React.js * En este caso, vamos a explorar cómo organizar carpetas y archivos en un proyecto de React.js. * Cada desarrollador puede tener su propia opinión sobre la mejor manera de hacerlo. * La estructura que seguiremos aquí es solo una de las muchas posibles. ## Organización por componentes con archivos index.js * Vamos a mover cada componente a su propia carpeta y renombrar los archivos principales a `index.js`. * También moveremos los archivos CSS relacionados a la misma carpeta que el componente correspondiente. * Esto ayuda a mantener todo lo relacionado con un componente en un solo lugar. ## Proceso de reorganización de componentes * **TodoCounter**: * Mover `todoCounter.js` a una carpeta llamada `todoCounter` y renombrarlo a `index.js`. * Mover `todoCounter.css` a la misma carpeta. * **TodoSearch**: * Mover `todoSearch.js` a una carpeta llamada `todoSearch` y renombrarlo a `index.js`. * Mover `todoSearch.css` a la misma carpeta. * **TodoList**: * Mover `todoList.js` a una carpeta llamada `todoList` y renombrarlo a `index.js`. * Mover `todoList.css` a la misma carpeta. ## Consideraciones adicionales durante la reorganización * **Actualizar imports**: * Después de mover los archivos, actualizar los imports en los archivos que dependen de ellos. * Por ejemplo, desde el componente `app`, asegurarse de que los imports apunten a la nueva ubicación. * **Solucionar problemas de importación**: * Si se mueven archivos SVG o CSS, asegurar que los imports se actualicen correctamente. * En el caso de `todoItem`, mover `completeIcon` y `deleteIcon` a la misma carpeta y ajustar los imports. ## Ejemplo de mover un componente complejo * **TodoIcon**: * Crear una carpeta llamada `todoIcon` y mover `todoIcon.js` renombrándolo a `index.js`. * Mover `completeIcon` y `deleteIcon` dentro de la carpeta `todoIcon`. * Mover los archivos `complete.svg` y `delete.svg` dentro de la carpeta `todoIcon`. * Ajustar los imports en los componentes que dependen de `todoIcon`. ## Verificar la aplicación después de reorganizar * **Probar la aplicación**: * Asegurarse de que todos los componentes se cargan correctamente y no hay errores en la consola. * Solucionar cualquier problema de imports que surja debido a la reorganización. * **Mantener la aplicación funcional**: * Confirmar que la funcionalidad de la aplicación no se ve afectada por los cambios en la estructura de archivos. ## Conclusión * Organizar los archivos y carpetas mejora la claridad y la mantenibilidad del proyecto. * La estructura basada en componentes con archivos `index.js` es solo una de las muchas filosofías de organización. * Elegir una estructura que facilite la colaboración y el crecimiento del proyecto es crucial para la experiencia del desarrollador.

Organización algo simple pero que ayuda bastante a encontrar fácilmente el archivo que se esta buscando.

En una entrevista laboral para el puesto de React Native Developer me hicieron la pregunta de como estaban estructuradas las carpetas de los proyectos en lo que había trabajo y que beneficio le veía, así que recomiendo le den buena ojeada a este tema. Esta estructura personalmente me gusta mucho ![](https://static.platzi.com/media/user_upload/image-0ab5ca43-e888-4d80-bd30-c18124061d32.jpg)
![](https://static.platzi.com/media/user_upload/20240110151422879-e18a3474-f58c-45af-aaac-b046d9c7188b.jpg)
En mi opinion, creo que seria mejor tener una carpeta src/components, asi como una src/hooks. Creo que si queremos saber si hay custom hooks en el repositorio, no es muy obvio buscar en src/App
En lo personal, decidi guardar los componentes en su propia carpeta, dentro de otra llamado components (con su css junto, y si tienen assets, dentro del componente que los use) y los archivos principales (indexjs, main css etc) fuera en el propio src. Almenos por ahora lo hare asi, tal vez mi yo del futuro lo cambie.
En mi opinion, nombrar los archivos index en la forma que lo está haciendo aquí, luego es dificil de leer para cuando haces busquedas y todos los archivos se llaman index, muchos elementos de UI le dan prioridad al nombre del archivo y no la ruta completa. se puede ver por ejemplo en las pestañas de la parte superior de Visual Studio Code, si todos se llaman index y el tamaño de la pestaña no es suficiente porque tenemos abiertas muchas, ahora tenemos que hacer hover en cada pestaña o ir clicando todas hasta encontrar la correcta. Recmiendo nombrar a los archivos de forma más especifica cómo la tenía antes, pero sí de acuerdo a separar por carpetas obviamente.
Después de que ordené todos los archivos y carpetas logré solucionar los errores de la app, sin embargo se me desaparecieron todos los ítemes de la lista de to-dos por defecto. En localStorage existe el item 'TODOS\_V1' y tiene los to-dos stringifeados, pero la lista inicial me aparece vacía... acá el código que creo que es relevante: ```js import React from "react"; // Custom hook - must start with prefix USE function useLocalStorage (itemName, initialValue) { // local storage persistency // get item from local storage const localStorageItem = localStorage.getItem('itemName'); // parsed to dos let parsedItem; // if nothing found, then create empty array in local storage AND parsed array if (!localStorageItem) { localStorage.setItem('itemName', JSON.stringify(initialValue)); parsedItem = initialValue; } else { // if found, parse from local storage parsedItem = JSON.parse(localStorageItem); } // Internal state for local storage items const [item, setItem] = React.useState(parsedItem); // Arrow function to save to dos in local storage and // APP state persistenly const saveItem = (newItem) => { localStorage.setItem('itemName', JSON.stringify(newItem)); setItem(newItem); }; // returns the item state and the function to save items to local storage and set item state return [item, saveItem]; } export { useLocalStorage }; ```import React from "react"; // *Custom hook - must start with prefix USE*function useLocalStorage (itemName, initialValue) { // *local storage persistency* // *get item from local storage* const localStorageItem = localStorage.getItem('itemName'); // *parsed to dos* let parsedItem; // *if nothing found, then create empty array in local storage AND parsed array* if (!localStorageItem) { localStorage.setItem('itemName', JSON.stringify(initialValue)); parsedItem = initialValue; } else { // *if found, parse from local storage* parsedItem = JSON.parse(localStorageItem); } // *Internal state for local storage items* const \[item, setItem] = React.useState(parsedItem); // *Arrow function to save to dos in local storage and* // *APP state persistenly* const saveItem = (newItem) => { localStorage.setItem('itemName', JSON.stringify(newItem)); setItem(newItem); }; // *returns the item state and the function to save items to local storage and set item state* return \[item, saveItem]; } export { useLocalStorage };
Qué buen profe 🥲
Hola Juan, tengo el siguiente error y no sé como solucionarlo: Compiled with problems:X ERROR in ./src/App/index.js 27:29-44 Can't import the named export 'useLocalStorage' (imported as 'useLocalStorage') from default-exporting module (only default export is available) ERROR in ./src/App/index.js 88:10-25 Can't import the named export 'useLocalStorage' (imported as 'useLocalStorage') from default-exporting module (only default export is available)
Hola Juan, tengo el siguiente error en mi codigo del proyecto y no logro solucionarlo![](<"C:\Users\alber\OneDrive\Pictures\Capturas de pantalla\Captura de pantalla 2023-11-09 224253.png">)
Mi sistema de organización es similar, pero prefiero organizar por secciones. mas que por funcionalidades, sigo un esquema básico similar al etiquetado de HTML o de componentes definido en app,js que es el principal. Me gusta llamar a este sistema de organización como "árbol de elementos y componentes". En este caso tengo 3 componentes padres que son: * Header * ToDoList * Footer Los cuales solo tienen hijos de primera generación, por lo tanto no es necesario crear subcarpetas en estos padres. ![](https://soyduque.com/resources/Captura2.png) Ah y en la carpeta styles incluyo los css generales, los específicos de cada componente los diferencio porque comienzan en minusula y porque son .css obviamente. **Obviamente cada proyecto y programador es diferente y dependerá de esto como organice sus archivos**
Algo que yo hice para reducir la cantidad de archivos es colocar el css de archivos que tengan pocos estilos dentro del mismo js a tráves de styled components. ![](https://static.platzi.com/media/user_upload/image-16d7081c-d111-433e-96ab-bb349fa2c1ae.jpg) <https://styled-components.com>
A lo que sé, los hooks y los componentes, se deben poner globales para que estos sean más accesibles y catalogadas de una mejor manera, alguien sabe si lo que digo está bien o mal? Los hooks se agregan abajo de Src y si los componentes son globales se pueden, aunque también se puede poner global dentro del mismo.