tc39 / proposal-signals

A proposal to add signals to JavaScript.
MIT License
3.38k stars 58 forks source link

Subscription to a collection #241

Open DanielHeath opened 2 weeks ago

DanielHeath commented 2 weeks ago

In current frameworks, when a signal stores an array, mutating the array in-place does not trigger a change, as the new & previous objects are the same instance.

In my experience with the Signal API, this is a common source of subtle errors.

Is there any prospect of supporting 'change' subscriptions for the various builtin collection types (array/set/map/weakmap/bytearray/), so that eg a Signal<Array<number>> automatically notifies subscribers when signal.value.push(4) is called?

milomg commented 2 weeks ago

Something like this? https://github.com/proposal-signals/signal-utils?tab=readme-ov-file#array

DanielHeath commented 2 weeks ago

Yes, awesome!

I still have some concerns about it being easy to accidentally use a non-signal array - would it make sense for signals to eg wrap array / object values by default, or log a warning in the developer console when a non-signal array is passed?