Closed Toubat closed 2 years ago
Change your array of numbers to an array of objects with one single attribute. Then modify that attribute.
export const store = syncedStore({
todos: [] as Todo[],
myText: {} as { text?: any },
arr: [] as { value: number }[],
fragment: "xml"
});
store.arr.push({value:1});
store.arr[0].value = 42;
Hi @Toubat,
The reason this is not supported, is that "assigning elements in an array" is most of the time not multi-user proof.
Assume we have an array ["green", "red", "blue"]
;
Let's say Alice and Bob both change array[1]
at the same time, while being "offline":
array[1] = "purple"
array[1] = "orange"
When these changes sync, would you expect ["green", "purple", "blue"]
, ["green", "orange", "blue"]
or ["green", "purple", "orange", "blue"]
?
When dealing with lists / arrays, I think often you'd want the latter ["green", "purple", "orange", "blue"]
. An assignment doesn't seem "idiomatic" for this, as it's better represented by a delete and insert operation.
I think adding support for assignment in arrays will lead to a lot of confusion in multi-user scenarios, I think it's cleaner to recommend users to use alternative operations (inserting and removing elements separately)
That's really helpful! Thank you for the detailed explanation!
It seems like array assignment by index is not supported currently. For example, if I have a store
Then I type:
It gives me an error says array assignment is not supported. Is there any other way I can do to accomplish equivalent operation?