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

202
Visualizações
Cómo enviar acciones después de obtener datos con suscripción

Después de obtener datos con suscripción, quiero enviar acciones como se muestra a continuación. Pero tanto la suscripción como el envío se ejecutan de forma asíncrona, donde no se obliga a apostar ninguna cadena. suscríbete y envía. Tampoco es posible describir el envío dentro de la suscripción, por lo que eso causaría un bucle infinito.

¿Cuál es una mejor manera de enviar acciones cuando obtengo ciertos datos de la suscripción?

Mi código actual es,

 // MyApp.ts ngOnInit() { this.store.subscribe(appState => { this.userId = ppState.currentUserId; )}; this.store.dispatch(new LoadInitialData(this.userId); data$ = this.store.select('data'); }

Mi posible solución es simplemente implementar en @Effect()...

 // MyApp.ts ngOnInit() { this.store.dispatch(new LoadUserId()); } //MyEffectService.ts @Effect() loadUserId$ = this.actions$ .ofType(LOAD_USER_ID) .withLatestFrom(this.store.select('userId') .map([any, userId] => userId) .map(userId => new LoadInitialData(userId));
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

this.store .map(appState => ppState.currentUserId) .do(userId => this.store.dispatch(new LoadInitialData(userId)) .subscribe(userId => this.userId = userId);
over 4 years ago · Santiago Trujillo Relatório

0

Use set Immediate, debería enviar el evento al último en el ciclo

 this.store.subscribe(appState => setImmediate(() => { this.userId = ppState.currentUserId this.store.dispatch(new LoadInitialData(this.userId) }) ))
over 4 years ago · Santiago Trujillo Relatório

0

La solución "posible" que mencionaste se ve bien.

Es una buena práctica mantener su componente inteligente (o contenedor) simple, sin demasiada lógica empresarial.

Es por eso que le sugiero que cambie el nombre de su acción a "Cargar" o "InitView", "Abrir"... para que coincida mejor con la acción real. (aquí inicialización de vista, o apertura de vista...). En el futuro, podría imaginar hacer más cosas (que solo cargar datos de usuario...) cuando se inicialice el componente. Su código dentro del componente se mantendrá simple con solo una acción enviada. La lógica empresarial permanece dentro de su efecto.

Sobre eso, echa un vistazo a esta buena conferencia de Mike Ryan: Good Action Hygiene con NgRx

Entonces, suena perfectamente bien usar un efecto para enviar otra acción (cargar los datos necesarios...).

Ejemplo (sin nueva sintaxis de creador de efectos/acciones):

 // MyApp.ts ngOnInit() { this.store.dispatch(new Init()); } // MyEffectService.ts @Effect() init$ = this.actions$ .ofType(Init) .withLatestFrom(this.store.select(selectors.getUserId) .map([any, userId] => userId) .map(userId => new LoadInitialData(userId));

PD: otra buena práctica es usar siempre el selector para recuperar una porción de su estado. (en el ejemplo anterior, utilicé selectors.getUserId )

over 4 years ago · Santiago Trujillo 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