-
Notifications
You must be signed in to change notification settings - Fork 21
Open
Description
If a store has a property that is an object, a mutation only triggers updates if the reference of the property is changed. See the following example.
Using the following store.
interface FilterType {
titleContains: string,
organizerId: number
}
export class ContestsStore extends VuexModule {
private filter = {} as FilterType;
public get filterAsArray (): Parameters<ContestControllerApi['findAll']> {
return [
this.filter.titleContains,
this.filter.organizerId
];
}
@mutation
addFilter (modification: FilterType): void {
for (const [key, value] of Object.entries(modification)) {
this.filter[key as keyof FilterType] = value;
}
}
}
A watcher is created for filterAsArray
, but the watcher does not update when addFilter
is called, because the reference to the filter stays the same. addFilter
does only cause an update when it's implemented like this.
@mutation
addFilter (modification: FilterType): void {
const newFilter = Object.assign({}, this.filter);
for (const [key, value] of Object.entries(modification)) {
newFilter[key as keyof FilterType] = value;
}
this.filter = newFilter;
}
I'm not sure whether this is a bug or intended. In case of the later one, if haven't found any documentation for this case anywhere and would like if there was a possibility to cause an update anyway.
Metadata
Metadata
Assignees
Labels
No labels