Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Only add event listeners when a block is first mounted #4860

Merged
merged 5 commits into from May 26, 2020
Merged

Conversation

Rich-Harris
Copy link
Member

This is an alternative to #4781, and fixes #4693. Rather than passing down a #remount variable that indicates whether a block is being remounted rather than mounted (due to a keyed each reordering), it allows blocks that contain event listeners (due to the on:, bind: or use: directives) to maintain their own #mounted state, and to add or ignore those listeners as appropriate.

(Initially I tried to reuse #current, but that's a little tricky — it becomes false when a block is outroing but still mounted, which means that an interrupted outro transition would result in listeners being reapplied, i.e. a memory leak, albeit less severe than the current situation.)

It does result in more code for those blocks. My gut says it's still a win compared to passing #remount around everywhere (certain in terms of the compiler source code), but I'm open to persuasion (or science) to the contrary.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

use-directives are called multiple times when elements inside a keyed block are reordered
2 participants