Tengo una pregunta sobre la arquitectura de la aplicación de reacción. Tengo algunos archivos auxiliares y no quiero usarlos como componente porque no representan nada. Lo que tengo actualmente funciona, pero quiero conocer las opiniones de mi solución de parte de desarrolladores profesionales de reacción (o cuál debería ser una mejor práctica). No encontré ninguna solución en internet para mi caso...
Tengo varios tipos de archivos auxiliares:
constants.ts - contiene constantes como:
export enum ComponentType { TextField, SelectBox, ... }tipos.ts - contiene tipos e interfaces, por ejemplo:
export type DBObject = { id: number, DBOClass: string, attributes: Array<DBObjectAttr>, editedAttrs: Array<DBObjectAttr>, isEdited: boolean } export interface BreadcrumbState { items: Array<BreadcrumbItemDef> }utils.ts: contiene funciones auxiliares independientes como:
const getEnvironmentDomain = () => { some string operations... }XMLParser.ts: contiene la clase XMLParser, que contiene un método estático para analizar la definición XML del formulario en el objeto javascript:
export class XMLParser { ... public static parseXMLFormDefinitions = async (xmlStringDef: string): Promise<FormDefs> => { ... } ... }DBManager.ts: contiene la clase DBManager para la manipulación de bases de datos; está lleno de funciones estáticas:
export class DBManager { ... public static fetchFormDefinitions = async (): Promise<FormDefs> => { ... } public static getDBObjectDefinition = (DBOClass: string): DBObject => { ... } public static insertToDB = async (body: any, reload: boolean = true): Promise<any> => { ... } ... }Como puede ver, exporto todo desde esos archivos y, como puede imaginar, lo importo en componentes donde sea necesario. Pero, ¿es la mejor práctica cómo diseñé eso? ¿Y cuál es el mejor lugar para ellos en la estructura del proyecto? Actualmente tengo:
<src>/ ├── <components>/ │ ├── <header>/ │ ├── <card>/ │ ├── ... ├── <pages>/ │ ├── <photos>/ │ ├── <docs>/ │ ├── ... ├── <store>/ │ ├── <reducers>/ │ ├── BreadcrumbReducer.ts │ ├── DBObjectReducer.ts │ ├── ... │ ├── index.ts │ ├── sagas.ts ├── constants.ts ├── types.ts ├── utils.ts ├── XMLParser.ts └── DBManager.ts¡Gracias!
En cuanto a cómo entendí las preguntas, esta es mi respuesta.
No creo que exista la mejor práctica. Puede estructurar los archivos como desee, existen algunas convenciones para la estructuración y no tiene que usarlo si no lo desea.
Y sobre los componentes 'ayudantes', cómo los llamas, dijiste en cuestión
No quiero usarlos como componente, porque no renderizan nada.
No estoy muy seguro de lo que hace con ellos, pero se pueden convertir en ganchos personalizados.
Un enlace personalizado le permite extraer la lógica de algunos componentes en una función reutilizable.
La cita anterior es de este enlace
O si los usa solo como contenedores, div-s de algún tipo, entonces piense en usar Fragmentos de reacción. Lea sobre fragmentos en documentos de reacción