web-dev-qa-db-ja.com

NGXSでpatchStateとsetStateを使用する方法

Ngxsを学習していますが、patchStatesetStateをいつ使用すればよいのか理解できません。違いは何ですか?

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

vs.

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

これらの2つのコードは同等です。 patchStatesetState({...state, ... }コードの簡略版です。

将来、patchStateは、同等性テスト(つまり、パッチが実際に値を変更した場合にのみ状態が変更される)とパッチオペレーター(これについてはまだ議論中です)を備えたより有用な不変性ヘルパーに進化する可能性があります。

patchStateを使用して、きちんと整理し、機能を活用することをお勧めします。

15
Mark Whitfeld

ITが適切に機能しない

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

できます

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

できます

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

すべての例は状態を更新します...しかし、最初の例は状態の変化に対してオブザーバブルをアクティブにしません。状態はimmutableなので、単純に編集して保存することはできず、編集できません。そして、常に古い状態を複製し、新しいコピーを編集して、この新しい状態を保存する必要があります。 patchStateはあなたのためにそれをします。

13
Michalis