Estructura del proyecto
Es bastante usual que un proyecto de React conste de varias decenas (e incluso centenas) de archivos, por lo que tener una buena organización de los mismos es fundamental. React no nos dice ni nos obliga a ordernarlos de cierta manera, por lo que, en proyectos personales, tenemos que buscar un criterio con el que nos sintamos cómodas. Hay una sugerencia bastante conocidad en el ámbito que dice: mueve cosas hasta que se sientan bien.
De todas formas, hay un par de sugerencias a tener en cuenta. Los lineamientos principales o que deberíamos tener presentes son básicamente dos:
- la estructura del proyecto debería informarmos inmediatamente de las cosas que contiene con solo mirarlo (esto se conoce como "screaming architectura").
- no debería haber carpetas anidadas con muchos niveles de profundidad (es decir, muchas carpetas dentro de carpetas dentro de carpetas). Es preferible una estructura más horizontal (todo a un mismo nivel) que vertical (o jerárquica).
Todos los archivos con los que trabajemos van a ir dentro de la carpeta src. Dentro de esta, una estructura mínima podría tener las carpetas:
- components
- assets
- styles
En components
van a ir todos nuestros componentes, en assets
aquellos archivos como ímagenes, íconos, fuentes, etc (podemos subdividirlos en categorías, y si tenemos muchas, subdivir estas) y en styles
todos aquellos estilos genéricos que no pertenezcan a un componente en particular.
Dentro de components
vamos a crear una carpeta por cada componente, con nombre en PascalCase
, como el mismo nombre del componente, y dentro de esto vamos a crear al menos un archivo .js
para el componente, y un archivo .scss
para los estilos, también con el mismo nombre. Por ejemplo, si nuestro componente se llama Comment
, nos quedaría:
- src
- components
- Comment
- Comment.js
- Comment.scss
- Comment
- components
En primera instancia ponemos todos los componentes bajo la carpeta components
, a un mismo nivel. En caso de que luego la cantidad de componentes empiece a crecer, podemos empezar a agruparlos dentro de subcarpetas. Básicamente, los criterios para agrupar componentes son dos:
- Componentes de un mismo tipo: buttons, modals, popups, menus
- Componentes que pertenezcan a una misma unidad o componente mayor: CommentText, CommentDate, CommentUsername, etc
Dentro de styles
vamos a incluir archivos .scss
que van a ser luego importados en los archivos .scss
de los componentes. Estos archivos tienen por lo general estilos generales o variables que se utilizan en todo el proyecto. Como tienen que ser importados, son archivos parciales, por lo que tienen que comenzar su nombre con guión bajo. Es preferible tener varios archivos (por ejemplo, uno para variables de colores, otro para variables de fuentes, etc), a un único archivo gigante. A su vez, en el caso de tener varios, también podemos agruparlos en subcarpetas si lo consideramos necesario.