mirror of https://github.com/sveltejs/svelte
tutorial: In the onDestroy example, explicitly show the memory leak (#5515)
parent
000c7ca5ba
commit
bca46b9f70
@ -1,10 +1,20 @@
|
|||||||
<script>
|
<script>
|
||||||
import { onDestroy } from 'svelte';
|
import Timer from './Timer.svelte';
|
||||||
|
|
||||||
|
let open = false;
|
||||||
let seconds = 0;
|
let seconds = 0;
|
||||||
|
|
||||||
|
const toggle = () => (open = !open);
|
||||||
|
const handleTick = () => (seconds += 1);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<p>
|
<div>
|
||||||
The page has been open for
|
<button on:click={toggle}>{open ? 'Close' : 'Open'} Timer</button>
|
||||||
|
<p>
|
||||||
|
The Timer component has been open for
|
||||||
{seconds} {seconds === 1 ? 'second' : 'seconds'}
|
{seconds} {seconds === 1 ? 'second' : 'seconds'}
|
||||||
</p>
|
</p>
|
||||||
|
{#if open}
|
||||||
|
<Timer callback={handleTick} />
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
<script>
|
||||||
|
import { onInterval } from './utils.js';
|
||||||
|
|
||||||
|
export let callback;
|
||||||
|
export let interval = 1000;
|
||||||
|
|
||||||
|
onInterval(callback, interval);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This component executes a callback every
|
||||||
|
{interval} millisecond{interval === 1 ? '' : 's'}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
border: 1px solid blue;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -1,5 +1,9 @@
|
|||||||
import { onDestroy } from 'svelte';
|
import { onDestroy } from 'svelte';
|
||||||
|
|
||||||
export function onInterval(callback, milliseconds) {
|
export function onInterval(callback, milliseconds) {
|
||||||
// implementation goes here
|
const interval = setInterval(callback, milliseconds);
|
||||||
|
|
||||||
|
onDestroy(() => {
|
||||||
|
// Fix the memory leak here
|
||||||
|
});
|
||||||
}
|
}
|
@ -1,11 +1,20 @@
|
|||||||
<script>
|
<script>
|
||||||
import { onInterval } from './utils.js';
|
import Timer from './Timer.svelte';
|
||||||
|
|
||||||
|
let open = true;
|
||||||
let seconds = 0;
|
let seconds = 0;
|
||||||
onInterval(() => seconds += 1, 1000);
|
|
||||||
|
const toggle = () => (open = !open);
|
||||||
|
const handleTick = () => (seconds += 1);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<p>
|
<div>
|
||||||
The page has been open for
|
<button on:click={toggle}>{open ? 'Close' : 'Open'} Timer</button>
|
||||||
|
<p>
|
||||||
|
The Timer component has been open for
|
||||||
{seconds} {seconds === 1 ? 'second' : 'seconds'}
|
{seconds} {seconds === 1 ? 'second' : 'seconds'}
|
||||||
</p>
|
</p>
|
||||||
|
{#if open}
|
||||||
|
<Timer callback={handleTick} />
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
<script>
|
||||||
|
import { onInterval } from './utils.js';
|
||||||
|
|
||||||
|
export let callback;
|
||||||
|
export let interval = 1000;
|
||||||
|
|
||||||
|
onInterval(callback, interval);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
This component executes a callback every
|
||||||
|
{interval} millisecond{interval === 1 ? '' : 's'}
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
p {
|
||||||
|
border: 1px solid blue;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in new issue