web-dev-qa-db-fra.com

Comment utiliser patchState vs setState dans NGXS?

J'apprends les ngx mais je ne comprends pas quand dois-je utiliser patchState et setState? Quelle est la différence?

const state = ctx.getState();
let data =  this.service.list();
ctx.setState({
    ...state,
    feedAnimals: data
});

vs.

let data =  this.service.list();
ctx.patchState({
    feedAnimals: data
});

Ces deux morceaux de code sont équivalents. patchState n'est qu'une version abrégée du setState({...state, ... } code.

À l'avenir, patchState évoluera très probablement vers une aide à l'immuabilité plus utile avec des tests d'égalité (c'est-à-dire que l'état ne sera modifié que si le correctif modifie réellement des valeurs) et des opérateurs de correctifs (ceci est toujours en discussion).

Je recommanderais d'utiliser patchState pour plus de netteté et pour profiter des fonctionnalités en cours.

15
Mark Whitfeld

IL NE FONCTIONNE PAS CORRECTEMENT

const state = context.getState();
state.permissions = action.payload;
context.setState(state);

ÇA MARCHE

const state = context.getState();
state.permissions = action.payload;
context.setState({ ...state });

ÇA MARCHE

const state = context.getState();
state.permissions = action.payload;
context.patchState(state);

Tous les exemples mettent à jour l'état ... mais le premier n'active pas l'observable pour les changements d'état, car l'état est immuable, cela signifie que vous ne pouvez pas simplement le modifier et l'enregistrer, il n'est pas modifiable et vous devrez toujours cloner l'ancien état, modifier votre nouvelle copie et enregistrer ce nouvel état. patchState le fait juste pour vous.

13
Michalis