fix: remove memory leak, make beforeUpdate
etc work correctly
#10570
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #10548. We were pushing signals to an array on the component context so that
beforeUpdate
/afterUpdate
callbacks could observe them, but we were never cleaning this array up.It turns out we only need to create this array for non-runes components, since
beforeUpdate
/afterUpdate
are forbidden in runes mode. We can therefore do the binding insidemutable_source
. We don't need to do any additional cleanup work because the context should be garbage collected when the component is destroyed.I also realised that in the (vanishingly rare!) case that a runes-mode component is passing proxied state into a non-runes-mode component, which has a
beforeUpdate
/afterUpdate
callback, the callbacks do not run when a property of the proxied state is updated. This is fixed in this PR by usingdeep_read
instead of shallowly reading props.Before submitting the PR, please make sure you do the following
feat:
,fix:
,chore:
, ordocs:
.Tests and linting
pnpm test
and lint the project withpnpm lint