Hola, me preguntaba si alguien sabe cómo obtener el estado actual de una tienda una vez sin tener que suscribirse. Actualmente estoy usando ngrx para suscribirme a la tienda y acceder a su estado para establecer el atributo de un componente, pero como estoy suscrito, este atributo se actualiza constantemente. Así que estoy buscando una manera de obtener este atributo solo una vez para poder mostrar los datos sin que se actualicen constantemente.
Por si acaso, esto sucede dentro del constructor de mi componente.
He estado intentando algo como esto:
_store.select('storeData.correlationData');
Al suscribirme accedería así:
_store.subscribe( (state) => { this.correlationData = state.storeData.correlationData; } );EDITAR
Estado de aplicación:
export interface ApplicationState { uiState: UiState; storeData: StoreData; }Puede crear la función getState() , colocarla en un módulo compartido e importarla donde sea necesario. La clave es hacerlo sincrónico usando el operador take(1) :
export function getState(store: any, selector: string) { let _state: any; store.take(1).subscribe(o => _state = o); return _state; }Aquí hay una versión más avanzada que estoy usando:
export function getState(store: any, selector?: any) { let _state: any; let state$: any; if (typeof selector === 'string' && /\./g.test(selector)) { state$ = store.pluck(...selector.split('.')); } else if (typeof selector === 'string') { state$ = store.map(state => state[selector]); } else if (typeof selector === 'function') { state$ = store.map(state => selector(state)); } else { state$ = store; } state$.take(1) .subscribe(o => _state = o); return _state; }Con esto, puede obtener el estado de diferentes maneras:
getState(this.store) // all data in Store getState(this.store, 'users') getState(this.store, state => state.users) getState(this.store, 'users.address.street') // Cool!Como señaló @Maximes en los comentarios, debe intentar usar Observables directamente en su código y usar este método para probar .