Svelte

Svelte on ohjelmistokehys web-sovellusten kehittämiseen JavaScriptin, HTML:n ja CSS:n avulla. Sille on ominaista muun muassa nopeus ja vakiokoodin (engl. boilerplate) ja erikoissyntaksin vähyys. Nopeus on seurausta erityisesti siitä, että Svelte kääntää sovelluskoodin natiiviksi JavaScriptiksi ja pyrkii näin tekemään vähemmän työtä ajon aikana.[1] Muita vastaavia kehyksiä ovat muun muassa React ja Vue.

Svelte tukee suoraan myös TypeScriptiä ja SCSS:ää, jotka käännetään JavaScriptiksi ja CSS:ksi esiprosessointivaiheessa.[2][3]

Esimerkit

SvelteKit-demo

SvelteKit-kehyksen sisältämän demosovelluksen tiedostorakenne näyttää seuraavalta:

$ tree --filelimit 20
├── node_modules  [116 entries exceeds filelimit, not opening dir]
├── package.json
├── package-lock.json
├── README.md
├── src
│   ├── app.html
│   ├── lib
│   │   └── images
│   │       ├── github.svg
│   │       ├── svelte-logo.svg
│   │       ├── svelte-welcome.png
│   │       └── svelte-welcome.webp
│   └── routes
│       ├── about
│       │   ├── +page.js
│       │   └── +page.svelte
│       ├── Counter.svelte
│       ├── Header.svelte
│       ├── +layout.svelte
│       ├── +page.js
│       ├── +page.svelte
│       ├── styles.css
│       └── sverdle
│           ├── how-to-play
│           │   ├── +page.js
│           │   └── +page.svelte
│           ├── +page.server.js
│           ├── +page.svelte
│           └── words.server.js
├── static
│   ├── favicon.png
│   └── robots.txt
├── svelte.config.js
└── vite.config.js

Tämä demosovellus sisältää laskurikomponentin tiedostossa Counter.svelte, joka näyttää oleellisilta osin seuraavalta:

<script>
    // Tuo store-objekti, jonka avulla voidaan muuttaa
    // arvo toiseen jatkuvalla tavalla.
	import { spring } from 'svelte/motion';
    // Komponentissa on yksi tilamuuttuja, joka
    // saa kokonaislukuarvoja.
	let count = 0;

    // Käyttäjälle näytetään reaalilukuja.
	const displayed_count = spring();
    // $-nimellä merkityt lauseet ovat reaktiivisia sisältämiensä
    // muuttujien arvojen muutoksille.
	$: displayed_count.set(count);
    // Jos muuttujan nimi alkaa $:lla, se tulkitaan automaattisesti
    // store-objektiksi tavallisen muuttujan sijaan.
	$: offset = modulo($displayed_count, 1);

    // Alla olevaa funktiota käytetään yllä; tämä on sallittua JavaScriptissä 
    // deklaraationa määritellyille funktioille ({{k-en|function hoisting}}).
	function modulo(n, m) {
		return ((n % m) + m) % m;
	}
</script>

<div class="counter">
    <!-- Lisää laskuria vähentävään button-elementtiin nimetön 
         tapahtumankäsittelijä natiiville DOM-tapahtumalle "click". 
         JavaScript tulee kaarisulkeisiin ja päivittää count-muuttujaa.
    -->
	<button on:click={() => (count -= 1)} aria-label="Decrease by one">
        <!-- SVG poistettu -->
	</button>

	<div class="cv">
        <!-- CSS-tyylistä tulee dynaaminen interpoloimalla
             siihen suoraan JavaScriptiä. -->
		<div class="cd" style="transform: translate(0, {100 * offset}%)">
			<strong class="hidden" aria-hidden="true">
                {Math.floor($displayed_count + 1)}
            </strong>
			<strong>
                {Math.floor($displayed_count)}
            </strong>
		</div>
	</div>

	<button on:click={() => (count += 1)} aria-label="Increase by one">
        <!-- SVG poistettu -->
	</button>
</div>

<style>
    /* CSS poistettu */
</style>

Käyttö

Svelten käyttö onnistuu esim. SvelteKit-työkalun avulla npm create svelte@latest nimi. Tämä edellyttää Node.js-ajoympäristöä ja npm-pakettienhallintaohjelmaa. npm install asentaa sovelluksen riippuvuudet ja npm run dev käynnistää paikallisen kehityspalvelimen. npm run build tuottaa lopullisen sovelluksen konfiguraatiotiedostojen mukaan ja tämä voidaan jakaa halutulla alustalla Node-palvelimella.[4] Osana tätä rakennusprosessia Svelte kääntää tiedostonsa optimoiduksi, natiiviksi JavaScriptiksi (luokaksi).[5]

Rakenne

Komponentit

Svelte-sovellukset koostuvat komponenteista, jotka ovat itsenäisiä joukkoja JavaScript-, HTML-, CSS-kieltä ja Svelte-syntaksia. Komponentit määritellään omiin tiedostoihinsa. JavaScript tulee script-merkkien väliin ja CSS style-merkkien väliin – loput komponentista on Svelten laajennettua HTML-tyyppistä merkintäkieltä. JavaScriptiä voidaan sekoittaa suoraan merkintäkieleen kaarisulkeissa, kuten <h1>Hello, {name}"</h1> tai <img {src} alt="Kuvateksti." >. Samalla tavalla esim. style-direktiivi helpottaa CSS-tyylien lisäämistä suoraan elementteihin tyylillä <p style:color={color} style:--cssmuuttuja={jsmuuttuja}>...</p>.[5]

Toisessa tiedostossa esim. Komponentti.svelte määritelty komponentti saadaan käyttöön import-lauseella, minkä jälkeen sitä voidaan käyttää HTML-elementin tavoin <Komponentti/>. Kun muuttujan (tai lauseen) tulee olla reaktiivinen toisen muuttujan arvon muutokseen, merkitään haluttu lause nimellä $, kuten $: x = teeJotain(y);. Vain muuttujaan sijoittaminen tekee muuttujasta reaktiivisen, eli JavaScript-objektin mutaatio muulla tavalla ei päivitä sovelluksen tilaa.[5]

Komponentteja määritellessä käytetään slot-elementtiä tyylillä <A><slot></slot></A> kertomaan Sveltelle, mihin komponentin alikomponentit/elementit, kuten <A><B/></A> injektoidaan. Jos mitään injektoitavaa ei anneta <A/>, Svelte käyttää komponenttiin määriteltyä oletuselementtiä <slot><nimi>...</nimi></slot>. Jos komponentissa on taas useita slotteja, niille annetaan nimet <slot name="nimi"> ja injektoitava elementti ohjataan sinne attribuutilla <B slot="nimi"/>.[5]

Logiikan lisääminen suoraan komponentin rakenteeseen onnistuu

  • ehtolauseilla {#if ...} ... {:else if ...} ... {:else} ... {/if} tai {#key arvo} ... {/key}
  • toistolauseella {#each xs as x (x.id)} ... {/each} ja
  • asynkroniselle tulokselle (Promise) syntaksilla {#await x} ... {:then y} ... {:catch e} ... {/await} tai lyhyemmin {#await x then y} ... {/await}.[5]

Erityisiin sisäänrakennettuihin Svelte-elementteihin kuuluvat <svelte:self>, <svelte:component this=...>, <svelte:element this=...>, <svelte:window>, <svelte:body>, <svelte:head>, <svelte:options> (kääntäjän asetukset) ja <svelte:fragment>.[5]

Komponenttien tiedonkulku

Kun alikomponentti tuodaan uuteen komponenttiin, tämän näkymään siirtyvät samalla komponentista jaetut muuttujat eli ns. propsit (engl. properties), kuten export let muuttuja = "oletusarvo";. Myös slotit hyväksyvät propseja, mutta nämä tulee tuoda näkyviin injektoinnin yhteydessä let-direktiivillä, kuten <Komponentti let:muuttuja={muuttuja}>...</Komponentti>. Tällöin arvo siirtyy siis toiseen suuntaan ylhäältä alas.[5]

Komponenttien kesken voidaan jakaa tietoa myös ilman props-mekanismia kontekstien avulla. Kun komponentti kutsuu setContext-funktiota, kyseinen konteksti (mikä tahansa objekti) on saatavissa alikomponenteissa getContext-kutsulla. Kolmas tapa jakaa tietoa saman komponentin instanssien kesken on käyttää ns. moduulikontekstia: kaikki <script context="module">-merkkien sisällä oleva JavaScript ajetaan vain kerran moduulin ajon aikana, eikä jokaiselle instanssille erikseen.[5]

Käyttäjän antamien arvojen siirtämiseksi ylös komponenttihierarkkiaa tarvitaan bind-direktiiviä, kuten <input bind:attribuutti={muuttuja}>. Eri elementeillä on erilaisia attribuutteja, joiden kanssa voidaan käyttää bind-direktiiviä joko yksi- (lue) tai kaksisuuntaisesti (lue ja kirjoita). bind:this viittaa attribuutin sijasta itse elementtiin, ja useasta elementistä voidaan ohjata arvoja yhteen muuttujaan käyttämällä bind:group-attribuuttia.[5]

Komponenttien ulkopuolisten tilamuuttujien käyttämiseen tarvitaan ns. tietovarastoa (engl. store), joka luodaan funktioiden, kuten writable, readable ja derived avulla tyylillä export const x = writable(0);. Tätä muuttujaa käytetään sitten tuonnin jälkeen sen metodien, kuten subscribe, set ja update kautta. Metodien suora käyttö voidaan myös välttää dollarisyntaksilla $muuttuja – Svelte tulkitsee tällaisen nimen aina varastoksi.[5]

Tapahtumienhallinta

Tapahtumankäsittelijän liittämiseksi komponentin/elementin tapahtumaan tehdään on-direktiivin avulla. Direktiivin ja tapahtuman lisäksi voidaan käyttää määreitä (engl. modifiers) muuttamaan tapahtumankäsittelijän toimintaa syntaksilla <button> on:click|once|stopPropagation|preventDefault={handleClick}>...</button>. Tapahtumankäsittelijä voi olla yksinkertaisen funktion sijasta myös ns. tapahtumanlähettäjä (engl. event dispatcher), jonka luomiseen käytetään Svelten createEventDispatcher-funktiota. Omien tapahtumien käsittelemiseksi tarvitaan oma ns. toimintofunktio (engl. action), joka liitetään elementtiin use-direktiivillä, kuten <div use:toiminto={{...}} on:tapahtuma={...}>...</div>.[5]

Tapahtumat eivät nouse (engl. bubble) komponenttihierarkiassa ylös automaattisesti; ulompaan komponenttiin ei kuitenkaan tarvitse määritellä omaa edelleenlähetystä vaan pelkän attribuutin lisääminen riittää <button on:click> ...</button>.[5]

Elinkaari ja siirtymät

Svelten elinkaarifunktio onMount mahdollistaa JavaScriptin ajon, kun komponentti renderöidään ensimmäisen kerran. Muita elinkaarifunktioita ovat onDestroy, beforeUpdate, afterUpdate ja tick (esim. await tick(); teeJotain();.[5]

Animaatioiden tekemiseen löytyy työkaluja motion, easing, transition ja animate moduuleista, kuten tweened, spring, fade, crossfade ja flip. DOM-siirtymät sidotaan elementteihin transition-, in-, out ja animate-direktiivien avulla, kuten <p transition:fly="{{parametri: 10 }}">...</p>. Siirtymillä voi olla myös määreitä, kuten transition:slide|local.[5]

Lähteet

  1. Home. Svelte. Viitattu 3.11.2022
  2. TypeScript • Docs • Svelte svelte.dev. Viitattu 7.6.2024. (englanniksi)
  3. svelte/compiler • Docs • Svelte svelte.dev. Viitattu 7.6.2024. (englanniksi)
  4. Introduction. Svelte. Viitattu 3.11.2022
  5. a b c d e f g h i j k l m n Basics. Tutorial. Svelte. Viitattu 3.11.2022

Read other articles:

Nama ini menggunakan cara penamaan Portugis. Nama keluarga pertama atau maternalnya adalah dos Reis dan nama keluarga kedua atau paternalnya adalah Lobato. Nicolau dos Reis LobatoLobato dalam Deklarasi Timor Leste (1975) Panglima Falintil ke-3Masa jabatanMei 1976 – 31 Desember 1978 PendahuluFernando do CarmoPenggantiXanana GusmãoPresiden Timor Leste nominalMasa jabatan7 Desember 1975 – 31 Desember 1978 PendahuluFrancisco Xavier do AmaralPenggantiSérgio Vieira d...

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Januari 2023. Penyerbuan Kedutaan Besar Israel di Kairo pada tahun 2011 dilakukan oleh ribuan demonstran Mesir. Mereka menyerang dan menerobos masuk Kedutaan Besar Israel di Giza, di sebelah barat Kairo pada hari Jumat 9 September 2011. Satuan polisi Mesir yang menj...

 

NDIA redirects here. For other uses, see Ndia. This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) A major contributor to this article appears to have a close connection with its subject. It may require cleanup to comply with Wikipedia's content policies, particularly neutral point of view. Please discuss further on the talk page. (July 2019) (Learn how and when to remove this template messag...

متنزه جزر القناة الوطني IUCN التصنيف V (منظر طبيعي أو بحري محمي)    البلد الولايات المتحدة[1]  الموقع الرسمي الموقع الرسمي  معرض صور متنزه جزر القناة الوطني  - ويكيميديا كومنز  تعديل مصدري - تعديل   متنزه جزر القناة الوطني (بالإنجليزية: Channel Islands National Park...

 

Private Christian university in Santa Clarita, California For the institution classification, see Carnegie Classification of Institutions of Higher Education § Master's Colleges and Universities. The Master's UniversityAerial view of The Master's UniversityFormer namesLos Angeles Baptist College and Seminary (1927–1985)The Master's College (1985–2016)MottoFor Christ and ScriptureTypePrivate universityEstablished1927AffiliationThe Master's SeminaryReligious affiliationNon-denominatio...

 

Untuk stadion, lihat Stadion Demang LehmanDemang Lehman BiografiKelahiran(bjn) Idies 1832 Martapura Kematian27 Februari 1864 (31/32 tahun)Martapura Penyebab kematianHanging KegiatanPekerjaanassistant Lain-lainGelar bangsawanMangkunegara Galat: Kedua parameter tahun harus terisi! Demang Lehman yang bergelar Adhipattie Mangko Nagara (Adipati Mangku Negara)[1] (lahir di Martapura tahun 1832[2][3] - meninggal di Martapura tanggal 27 Februari 1864 pada umur 32 tahun) adalah...

See also: History of Paris Part of a series on the History of Paris Middle Ages Renaissance 17th century 18th century Under Napoleon Restoration Under Louis-Philippe Second Empire Renovation Belle Époque World War I Interwar period World War II Postwar See also Timeline Architectural history Music Demographics Mayors Parks Writers  France portalvte Part of a series on the History of France Ancient Prehistory   Greek colonies 600 BC – 49 BC Celtic Gaul   until 50 BC Roma...

 

Questa voce sull'argomento allenatori di pallacanestro statunitensi è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Ralph Miller Ralph Miller (a sinistra) nel 1968 Nazionalità  Stati Uniti Pallacanestro Ruolo Allenatore Termine carriera 1989 Hall of fame Naismith Hall of Fame (1988) Carriera Giovanili Chanute High School1937-1941 Kansas Jayhawks Carriera da allenatore 1951-1964 WSU...

 

American religious leader (1856–1945) Heber J. Grant7th President of the Church of Jesus Christ of Latter-day SaintsNovember 23, 1918 (1918-11-23) – May 14, 1945 (1945-05-14)PredecessorJoseph F. SmithSuccessorGeorge Albert Smith President of the Quorum of the Twelve ApostlesNovember 18, 1916 (1916-11-18) – November 23, 1918 (1918-11-23)PredecessorFrancis M. LymanSuccessorAnthon H. LundEnd reasonBecam...

Indian film actor Sunny WayneSunny Wayne on a shooting locationBornSujith Unnikrishnan19 August 1983 (1983-08-19) (age 40)Wayanad, Kerala, IndiaAlma materCalicut University Institute of Engineering and TechnologyOccupations Actor Producer Years active2012–presentSpouse Renjini T. H. ​(m. 2019)​ParentsUnnikrishnanSoumini Sujith Unnikrishnan[1] (born 19 August 1983), known by his stage name Sunny Wayne is an Indian actor who predominant...

 

11 september-attackernaSeptember 11 attacks Från toppen till botten: World Trade Center brinner; den del av Pentagon som träffats av Flight 77 och kollapsat; Flight 175 flyger in i 2 WTC; en brandman begär hjälp vid Ground zero; en motor från Flight 93 återfinns; Flight 77 flyger in i Pentagon.PlatsNew York;Arlington County, Virginia;Nära Shanksville, PennsylvaniaDatum11 september 2001 08:46–10:28 (UTC-04:00)AttacktypFlygplanskapningMassmordSjälvmordsattackTerrorismVapenPassagerarfl...

 

Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (février 2013). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ». En pratique : Quelles sources sont attendues ? ...

此條目可参照英語維基百科相應條目来扩充。 (2021年5月6日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。 约翰斯顿环礁Kalama Atoll 美國本土外小島嶼 Johnston Atoll 旗幟颂歌:《星條旗》The Star-Spangled Banner約翰斯頓環礁�...

 

Державний комітет телебачення і радіомовлення України (Держкомтелерадіо) Приміщення комітетуЗагальна інформаціяКраїна  УкраїнаДата створення 2003Керівне відомство Кабінет Міністрів УкраїниРічний бюджет 1 964 898 500 ₴[1]Голова Олег НаливайкоПідвідомчі ор...

 

Ruta de la Seda: red viaria del corredor Chang'an-Tianshan Patrimonio de la Humanidad de la Unesco Rutas principales de la Ruta de la SedaLocalizaciónPaís China ChinaKirguistán Kirguistán TayikistánUzbekistán Uzbekistán TurkmenistánIrán IránIrak IrakSiria SiriaTurquía TurquíaJordania JordaniaPalestina PalestinaIsrael IsraelEgipto EgiptoDatos generalesTipo CulturalCriterios ii, iii, iv, viIdentificación 1442Región Asia y...

Nabeel RajabNabeel di kantornyaLahirNabeel Ahmed Rajab1 Januari 1964 (umur 60)BahrainTempat tinggalBani Jamra, BahrainPendidikanSarjana Sains Politik dan Sejarah dari Universitas PunePekerjaanAktivis HAMTahun aktif1988–sekarangAnakAdam and MalakSitus webBahrain Rights Facebook Twitter Nabeel Ahmad Abdurasool Rajab (Arab: نبيل أحمد عبدالرسول رجب) adalah seorang aktivis hak asasi manusia Bahrain dan penentang oposisi. Ia adalah presiden Pusat Hak Asasi Manus...

 

|1 = European Union–Philippine...= |2 = European Union= |3 = Philippines= Відносини Філіппіни — Європейський Союз Європейський Союз Філіппіни Європейський Союз і Філіппіни мають дипломатичні, економічні, культурні та політичні відносини. Європейський Союз надав Філіппінам мільйони євро для боротьб...

 

American baseball player-manager (1864–1952) John Francis Smith redirects here. For the fictional character, see Ranger John Francis Smith. John Gammon redirects here. Not to be confused with John Gammons. Baseball player Phenomenal SmithSmith, c. 1888PitcherBorn: (1864-12-12)December 12, 1864Philadelphia, Pennsylvania, USDied: April 3, 1952(1952-04-03) (aged 87)Manchester, New Hampshire, USBatted: LeftThrew: LeftMLB debutApril 18, 1884, for the Philadelphia AthleticsLas...

ميت عباد  -  قرية مصرية -  تقسيم إداري البلد  مصر المحافظة محافظة الدقهلية المركز نبروه المسؤولون السكان التعداد السكاني 1853 نسمة (إحصاء 2006) معلومات أخرى التوقيت ت ع م+02:00  تعديل مصدري - تعديل   قرية ميت عباد هي إحدى القرى التابعة لمركز نبروه في محافظة الدقهلي�...

 

British artist and printmaker (1859–1921) For other people named William Strang, see William Strang (disambiguation). William StrangRABorn(1859-02-15)15 February 1859Dumbarton, Scotland, UKDied12 April 1921(1921-04-12) (aged 62)EducationAlphonse LegrosAlma materSlade SchoolSpouseAgnes McSymon RogersonChildrenIan Strang, David StrangElectedMaster of the Art Workers' Guild, President of the International Society of Sculptors, Painters and Gravers, Engraver Member of the Royal Academ...