Skip to content

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