Ich fühle mich wie ich bekomme die meisten Mobx, aber ich möchte etwas klären. Ich habe ein Geschäft mit einigen Observablen bekam, dessen Kern ein Array von Objekten (Typoskript):Wann ich berechnen/Observables in Mobx
class ClientStore {
constructor() {
this.loadClients();
}
@observable private _clients: IClient[] = [];
@computed get clients() {
return this._clients;
}
@observable isFetching: boolean = false;
@observable sortField: 'title' | 'modified' = 'modified';
@observable sortDescending: boolean = true;
getClientByUrlName(urlName: string): IClient {
return this._clients.find(c => c.urlName === urlName);
}
etc...
Meine Frage ist die letzte Funktion - getClientByUrlName. Da dies von einem beobachtbaren Objekt aus erfolgt, wird jede @observer-Reaktionskomponente, die diese Funktion verwendet, korrekt neu gerendert. Ist das idiomatische Mobx für so etwas? Es fühlt sich an, als ob das ein berechneter Wert sein sollte. Soll ich einen berechneten Wert in der Komponente angeben, die ihn verwenden möchte?
//import singletone ClientStore
class ClientDetailsView extends React.Component<{params:{urlName:string}}, void> {
@computed get client() {
return ClientSotre.clients.find(c => c.urlName === this.props.params.urlName);
}
...rest of react component
Ich bin auf der Suche nach Best Practices und Gotchas hier. Jede Hilfe wird geschätzt.
* edit festes Codebeispiel Fehler
Ah hah! Das schien wie ein Stück, das ich vermisste. Jedes Mal, wenn ich die Dokumente durchgehe, sehe ich ein Teil, als wäre es ganz neu. Komisch, dass das Verfolgen der berechneten Eigenschaft in der Komponente selbst zu mir kam, als ich die Frage schrieb. [Off Topic] Ich bin wirklich wie MobX im Allgemeinen (ich konvertiere von Redux). Je mehr ich lerne, wie es funktioniert, desto mehr mag ich es. Danke für die harte Arbeit! – Jakke
Ich habe die Dokumente in den letzten Tagen tatsächlich ein wenig umstrukturiert, so dass der Eindruck stimmt :) – mweststrate
Ich bin etwas verwirrt, warum es besser wäre, das '@ calculated' in die ClientDetailsView anstatt in den Speicher zu legen. Würde es den gleichen Effekt haben, wenn man es in den Laden legt? – Jeff