When we removed the component from DOM, the onDestroy() method is used. We need to call it before the component is removed from the DOM.
Let's create a new component, DateAndTimeComponent.svelte
and add the following code.
<script> import { onMount } from 'svelte' let tasks = [] const url = 'http://time.jsontest.com' onMount( async () => { fetch(url) .then( response => response.json() ) .then( data => { tasks = data } ) }); </script> <table> <thead> <tr> <th>Date</th> <th>Epoch Time</th> <th>Time</th> </tr> </thead> <tr> <td>{tasks.date}</td> <td>{tasks.milliseconds_since_epoch}</td> <td>{tasks.time}</td> </tr> </table>
We have only implemented the onMount() lifecycle function. If you are not aware of onMount then please visit the following article.
And in the App.svelte add the following:
<script> import DateAndTimeComponent from "./DateAndTimeComponent.svelte"; let showComponent = false; </script> <main> {#if showComponent} <DateAndTimeComponent /> {/if} </main> <style> main { text-align: center; padding: 1em; max-width: 240px; margin: 0 auto; } @media (min-width: 640px) { main { max-width: none; } } </style>
If you visit the webpate http://localhost:5000 then you'll see an empty page because showComponent variable is false at the moment.
Lets add a button to show the component. onMount will only be called once when the component is loaded to the DOM.
In the App.svelte
, add the following under the main
tag.
<script> .... .. .. .. </script> <main> <button on:click={ () => showComponent = !showComponent }>Show Component</button> {#if showComponent} <DateAndTimeComponent /> {/if} </main>
And in the DateAndTimeComponent.svelte
we'll add the onDestroy lifecycle function.
<script> import { onMount, onDestroy } from 'svelte' let tasks = [] const url = 'http://time.jsontest.com' onMount( async () => { fetch(url) .then( response => response.json() ) .then( data => { tasks = data } ) }); onDestroy( () => { console.log("Date Component removed") }); </script> <table> <thead> <tr> <th>Date</th> <th>Epoch Time</th> <th>Time</th> </tr> </thead> <tbody> <tr> <td>{tasks.date}</td> <td>{tasks.milliseconds_since_epoch}</td> <td>{tasks.time}</td> </tr> </tbody> </table>
Take a look at import { onMount, onDestroy } from 'svelte'
and
onDestroy( () => { console.log("Date Component removed") });
Top comments (0)