Dentro de un proyecto de React, automáticamente se crean las carpetas:
Dentro de la carpeta public se encuentra el archivo index.html que se publicará como el inicio de la aplicación web, asimismo, se incluye todos los elementos que tienen que ver con el index.html
Por otro lado, en la carpeta src se colocan todos los archivos .jsx o .tsx relacionados con nuestros componentes, adicionalmente, se colocan los archivos js o ts relacionados con nuestras configuraciones de Redux, Context, API entre otros, por lo que, es esencial realizar un orden acerca de los elementos que se incluirán en la carpeta src.
Organización de src:
src/
|–client
|–components
|–content
|–context
|–pages
|–state
|–assets
|–config
|–models
|–utils
|–forms
|–mocks
|–environment
|–translate
routes.ts
index.js
app.js
En esta carpeta va todo lo relacionado con un apollo client esto para consumir lo que es graphql los queries y los mutations que se necesiten
|client
–-|nombre
––-\queries.ts
––-\mutations.ts
Dentro de esta carpeta se colocarán todos los componentes que se utilizarán dentro de las páginas, con la siguiente estructura:
|components
–-|nombre-componente
––-\nombre-componente.component.[jsx|tsx]
––-\nombre-componente.styles.[css|scss]
Nos sirve para crear un intermedio entre el componente de ruta y el componente donde se encuentra renderizado nuestro HTML
en este componente se cargan lo que se son las peticiones a nuestro servidor de graphql, en este se hacen esas peticiones que recargan el cache existente , esto se hace por que esas funciones llegan a ser bastante grandes
Dentro de Contex podemos crear algo muy similar a lo que es REDUX el cual es un arbol de state que es global en toda nuestra app, podemos crear diferentes context para usarlos en la app
|context
––-\nombre.context.[jsx|tsx]
Dentro de esta carpeta colocaremos todas las páginas que se verán en nuestra aplicación, por ejemplo, la página de Login se colocará en está carpeta. Siguiendo el mismo patrón que los componentes.
|pages
–-|nombre-pagina
––-\nombre-pagina.component.[jsx|tsx]
––-\nombre-pagina.styles.[css|scss]
––-\nombre-pagina.data.[js|ts]
Dentro de esta carpeta se colocará todo lo referente a Redux. Asimismo, dentro de esta carpeta es recomendable crear una carpeta por módulo.
|redux/state
root.reducer.js
store.js
–-\modulo
––-\modulo.actions.js
––-\modulo.utils.js
––-\modulo.reducer.js
––-\modulo.types.js
Dentro de esta carpeta se colocan todos los archivos que no tienen que ver con la programación de nuestro proyecto, tales archivos como los multimedia, pdf, documentos, entre otros.
|assets
–-\images
––-logo.png
–-\videos
––-cover.mp4
–-\docs
––-instructions.txt
Dentro de esta carpeta, colocaremos todas las configuraciones referentes a librerias externas, como la configuración de Firebase, AWS Cognito, entre otras.
|config
–-\firebase
––-firebase.config.[js|ts]
–-\aws
––-aws-exports.[js|ts]
Dentro de esta carpeta colocaremos todos los modelos de nuestra aplicación, para definir la estructura de los objetos.
|models
–-\user
––-user.model.ts
Dentro de esta carpeta se colocarán aquellas funciones o porciones de código que pueden ser reutilizables dentro de diferentes componentes, páginas, entre otros.
|utils
–-\filter
––-filter.util.[js|ts]
Para la validacion de los formularios , en este caso se uso yup y yup necesuta un schemma de formulario donde pondremos todos los campos que usaremos, estos pueden ser requeridos o no , tambien podemos asignarle un tipo de datos
|forms
––-nombre.schema.[js|ts]
Los mocks son simplemente datos estaticos los cuales sirven cuando no tenemos una base de datos disponible
|environment
––-nombre.data.[js|ts]
Dentro de esta carpeta se colocarán los archivos de ambientes de producción los cuales contienen información acerca de datos de configuraciones correspondientes a determinado ambiente.
|environment
––-environment.prod.[js|ts]
––-environment.[js|ts]
En caso de que nuestra app use mas de un idioma nostros podemos tener los archivos con mensajes o textos en varios idiomas, tambien tenemos el archivos de configuracion para el uso de idiomas de nuestra app
|translate
––-nombre.json
––-index.[js|ts]