Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

144
Visualizações
Métodos privados en el componente de función de servicio React

Soy un poco nuevo en React y actualmente estoy desarrollando un proyecto que tiene una capa de servicio. Para hacerlo, creé un componente de función que tendría los métodos como variables:

 const CustomComponent = () => { method1 = () => {...}, method2 = () => {...}, method3 = () => {...} } export default CustomComponent;

Luego, este componente se importaría al componente que lo usará.

Para que mi arquitectura sea lo más limpia posible, quería que algunos de los métodos fueran privados. Sin embargo, como ya sabrá, eso no es posible en la solución que propuse. ¿Hoy tengo una idea sobre cómo lograr esto, o tal vez hay una convención para hacer una capa de servicio que desconozco?

¡Muchas gracias de antemano!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

La arquitectura que encuentro particularmente limpia y fácil de mantener es aquella en la que se separa la lógica de la presentación en dos archivos como este:

Capa de servicio (ts):

 export class Service implements ServiceInterface { constructor(private instanceVariable: string = "foo") { } private methodOne(): string { return this.instanceVariable } public methodTwo(argumentVariable: string): string { const importantString = this.methodOne(); return importantString + argumentVariable; } } interface ServiceInterface { methodTwo(argumentVariable: string): string; } export default new Service();

Capa de servicio (js):

 export class Service { instanceVariable; constructor(contructorArgument) { this.instanceVariable = contructorArgument; } methodOne() { return this.instanceVariable } methodTwo(argumentVariable) { const importantString = this.methodOne(); return importantString + argumentVariable; } } export default new Service();

Capa de presentación:

 import Service from "./service.ts"; const FunctionalComponent = () => { const [localState, setLocalState] = useState(localStateInit); return ( <> <div>{Service.methodTwo("bar")}</div> </> ) }

Pocas cosas suceden aquí (principalmente con respecto a la implementación de ts).

  1. Mantenga las capas de servicio y presentación del componente en archivos separados.
  2. Utilice una interfaz para describir la clase de servicio y sus métodos. Esto ayudará a trabajar con su capa de servicio en su componente, ya que obtendrá IntelliSense de Typescript.
  3. Para este ejemplo, estoy exportando una instancia del servicio como exportación predeterminada desde su archivo. Esto le brinda una API más limpia en el archivo de su componente, donde puede llamar a métodos sin tener que "contaminar" el archivo del componente con la creación de instancias. Esto tiene al menos los siguientes dos inconvenientes:
  • en su mayoría pierde la capacidad de trabajar bien con miembros de clase estáticos
  • La variable de instancia preconfigurada (iniciada como miembro privado en el constructor) significa que su valor no se puede reemplazar en las pruebas.

Si alguno de los anteriores no funciona, limpie el constructor, exporte solo la clase en sí y cree una instancia según sea necesario en el archivo del componente.

  1. También estoy exportando la clase en sí. Esto es para fines de prueba. En las pruebas, desea poder intercambiar los argumentos pasados al constructor de la clase y necesita tener una definición de clase para hacerlo.
  2. Notarás la notación abreviada para declarar e instanciar una variable de clase privada en el constructor: private instanceVariable: string = "foo" . Esto es equivalente a algo como esto:
 class Service { private instanceVariable: string; constructor(constructorArgument: string) { this.instanceVariable = constructorArgument; }

Tal notación es particularmente agradable cuando se usa con inyección de dependencia.

  1. En general, esta configuración lo ayudará con la lógica de prueba unitaria en su capa de servicio, ya que puede probarla como cualquier otra clase. Esto es particularmente útil cuando hay mucha lógica de representación condicional.

Déjame saber si esto es lo que has estado buscando. Tal vez podamos adaptarlo mejor a su caso de uso.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda