Skip to content

Commit 70f0ad5

Browse files
committed
create teardown effect
1 parent 5b0a843 commit 70f0ad5

File tree

8 files changed

+31
-32
lines changed

8 files changed

+31
-32
lines changed

packages/svelte/src/internal/client/dom/elements/bindings/input.js

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { DEV } from 'esm-env';
2-
import { render_effect, effect } from '../../../reactivity/effects.js';
2+
import { render_effect, effect, teardown } from '../../../reactivity/effects.js';
33
import { stringify } from '../../../render.js';
44
import { listen_to_event_and_reset_event } from './shared.js';
55
import * as e from '../../../errors.js';
@@ -103,14 +103,12 @@ export function bind_group(inputs, group_index, input, get_value, update) {
103103
}
104104
});
105105

106-
render_effect(() => {
107-
return () => {
108-
var index = binding_group.indexOf(input);
106+
teardown(() => {
107+
var index = binding_group.indexOf(input);
109108

110-
if (index !== -1) {
111-
binding_group.splice(index, 1);
112-
}
113-
};
109+
if (index !== -1) {
110+
binding_group.splice(index, 1);
111+
}
114112
});
115113

116114
effect(() => {
@@ -189,6 +187,7 @@ export function bind_files(input, get_value, update) {
189187
listen_to_event_and_reset_event(input, 'change', () => {
190188
update(input.files);
191189
});
190+
192191
render_effect(() => {
193192
input.files = get_value();
194193
});

packages/svelte/src/internal/client/dom/elements/bindings/media.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { hydrating } from '../../hydration.js';
2-
import { render_effect, effect } from '../../../reactivity/effects.js';
2+
import { render_effect, effect, teardown } from '../../../reactivity/effects.js';
33
import { listen } from './shared.js';
44

55
/** @param {TimeRanges} ranges */
@@ -52,7 +52,7 @@ export function bind_current_time(media, get_value, update) {
5252
updating = false;
5353
});
5454

55-
render_effect(() => () => cancelAnimationFrame(raf_id));
55+
teardown(() => cancelAnimationFrame(raf_id));
5656
}
5757

5858
/**

packages/svelte/src/internal/client/dom/elements/bindings/props.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render_effect } from '../../../reactivity/effects.js';
1+
import { teardown } from '../../../reactivity/effects.js';
22
import { get_descriptor } from '../../../utils.js';
33

44
/**
@@ -15,7 +15,7 @@ export function bind_prop(props, prop, value) {
1515

1616
if (desc && desc.set) {
1717
props[prop] = value;
18-
render_effect(() => () => {
18+
teardown(() => {
1919
props[prop] = null;
2020
});
2121
}

packages/svelte/src/internal/client/dom/elements/bindings/shared.js

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render_effect } from '../../../reactivity/effects.js';
1+
import { teardown } from '../../../reactivity/effects.js';
22
import { add_form_reset_listener } from '../misc.js';
33

44
/**
@@ -18,12 +18,10 @@ export function listen(target, events, handler, call_handler_immediately = true)
1818
target.addEventListener(name, handler);
1919
}
2020

21-
render_effect(() => {
22-
return () => {
23-
for (var name of events) {
24-
target.removeEventListener(name, handler);
25-
}
26-
};
21+
teardown(() => {
22+
for (var name of events) {
23+
target.removeEventListener(name, handler);
24+
}
2725
});
2826
}
2927

packages/svelte/src/internal/client/dom/elements/bindings/size.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { effect, render_effect } from '../../../reactivity/effects.js';
2-
import { untrack } from '../../../runtime.js';
1+
import { effect, teardown } from '../../../reactivity/effects.js';
32

43
/**
54
* Resize observer singleton.
@@ -89,7 +88,7 @@ export function bind_resize_observer(element, type, update) {
8988
: resize_observer_device_pixel_content_box;
9089

9190
var unsub = observer.observe(element, /** @param {any} entry */ (entry) => update(entry[type]));
92-
render_effect(() => unsub);
91+
teardown(unsub);
9392
}
9493

9594
/**

packages/svelte/src/internal/client/dom/elements/bindings/window.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { effect, render_effect } from '../../../reactivity/effects.js';
1+
import { effect, render_effect, teardown } from '../../../reactivity/effects.js';
22
import { listen } from './shared.js';
33

44
/**
@@ -51,10 +51,8 @@ export function bind_window_scroll(type, get_value, update) {
5151
// Browsers don't fire the scroll event for the initial scroll position when scroll style isn't set to smooth
5252
effect(target_handler);
5353

54-
render_effect(() => {
55-
return () => {
56-
removeEventListener('scroll', target_handler);
57-
};
54+
teardown(() => {
55+
removeEventListener('scroll', target_handler);
5856
});
5957
}
6058

packages/svelte/src/internal/client/dom/elements/events.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { render_effect } from '../../reactivity/effects.js';
1+
import { render_effect, teardown } from '../../reactivity/effects.js';
22
import { all_registered_events, root_event_handles } from '../../render.js';
33
import { define_property, is_array } from '../../utils.js';
44
import { hydrating } from '../hydration.js';
@@ -80,10 +80,8 @@ export function event(event_name, dom, handler, capture, passive) {
8080

8181
// @ts-ignore
8282
if (dom === document.body || dom === window || dom === document) {
83-
render_effect(() => {
84-
return () => {
85-
dom.removeEventListener(event_name, target_handler, options);
86-
};
83+
teardown(() => {
84+
dom.removeEventListener(event_name, target_handler, options);
8785
});
8886
}
8987
}

packages/svelte/src/internal/client/reactivity/effects.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,13 @@ export function effect_active() {
144144
return false;
145145
}
146146

147+
/**
148+
* @param {() => void} fn
149+
*/
150+
export function teardown(fn) {
151+
return render_effect(() => fn);
152+
}
153+
147154
/**
148155
* Internal representation of `$effect(...)`
149156
* @param {() => void | (() => void)} fn

0 commit comments

Comments
 (0)