Recientemente agregué la tienda ngrx a mi aplicación angular2 existente para simplificar el código y mantener un estado compartido. Sin embargo, estoy confundido acerca de una parte, actualizo mi estado desde el servidor una vez al principio y luego solo trabajo en el estado sin verificar el servidor. Entonces, ¿qué sucede cuando, por ejemplo, algo cambia en el backend? ¿Debo verificarlo cada vez que voy a esa página o hay una mejor manera? Básicamente, quiero saber cuál es la mejor práctica para asegurarme de que los datos de su estado se actualicen para mostrar los datos del servidor.
Se recomienda utilizar efectos NGRX . Cuando implementa los efectos NGRX junto con la tienda, cualquier efecto secundario HTTP es manejado por los efectos, que a su vez usarán una acción en la tienda para actualizar los datos. Un efecto escucha la acción y usa la carga útil de la acción para realizar un efecto secundario (HTTP). Cuando finaliza el efecto, llama a una nueva acción (ya sea una acción para el éxito o una acción para el fracaso) con una nueva carga útil, actualizando así los datos en la tienda.
En el ejemplo de los documentos de efectos , muestra un efecto para iniciar Login :
@Injectable() export class AuthEffects { constructor( private http: Http, private actions$: Actions ) { } @Effect() login$ = this.actions$ // Listen for the 'LOGIN' action .ofType('LOGIN') // Map the payload into JSON to use as the request body .map(action => JSON.stringify(action.payload)) .switchMap(payload => this.http.post('/auth', payload) // If successful, dispatch success action with result .map(res => ({ type: 'LOGIN_SUCCESS', payload: res.json() })) // If request fails, dispatch failed action .catch(() => Observable.of({ type: 'LOGIN_FAILED' })) ); } En este ejemplo, Effect for Login escucha la acción LOGIN . Cuando se produce la acción LOGIN , utiliza la carga útil de la acción y realiza una POST HTTP. Cuando HTTP POST regresa, llama a la acción LOGIN_SUCCESS con la respuesta json para la carga útil o devuelve la acción LOGIN_FAILED .
De esta manera, su tienda siempre se mantiene al tanto de cualquier efecto secundario, como HTTP. Si un componente actualiza un registro en la base de datos, el Efecto debe notificar a la Tienda para que todos los componentes suscritos a esos datos obtengan los datos actualizados.
Espero que ayude.