Skip to main content

Command Palette

Search for a command to run...

Svelte

มาลองเขียนเว็บโดยใช้ Svelte 5 กับ SvelteKit 2 ดูว่าจะเป็นยังไงบ้าง

Updated
4 min read
Svelte

เริ่มต้นที่การสร้าง Project

npm create svelte@latest my-project

create-svelte version 6.0.10

┌  Welcome to SvelteKit!
│
◆  Which Svelte app template?
│  ○ SvelteKit demo app
│  ● Skeleton project (Barebones scaffolding for your new SvelteKit app)
│  ○ Library project
└

┌  Welcome to SvelteKit!
│
◇  Which Svelte app template?
│  Skeleton project
│
◆  Add type checking with TypeScript?
│  ○ Yes, using JavaScript with JSDoc comments
│  ● Yes, using TypeScript syntax
│  ○ No
└

Welcome to SvelteKit!
│
◇  Which Svelte app template?
│  Skeleton project
│
◇  Add type checking with TypeScript?
│  Yes, using TypeScript syntax
│
◆  Select additional options (use arrow keys/space bar)
│  ◻ Add ESLint for code linting
│  ◻ Add Prettier for code formatting
│  ◻ Add Playwright for browser testing
│  ◻ Add Vitest for unit testing
│  ◼ Try the Svelte 5 preview (unstable!)
└

✔ Typescript
  Inside Svelte components, use <script lang="ts">

Install community-maintained integrations:
  https://github.com/svelte-add/svelte-add

Next steps:
  1: cd my-project
  2: npm install
  3: git init && git add -A && git commit -m "Initial commit" (optional)
  4: npm run dev -- --open

To close the dev server, hit Ctrl-C

Stuck? Visit us at https://svelte.dev/chat

หลังจากนั้นให้เข้าไปที่ my-project

cd my-project

จากนั้นติดตั้ง Tailwindcss

npx --yes svelte-add@latest tailwindcss

จากนั้นก็ใช้คำสั่ง npm install เพื่อติดตั้ง Package ที่จำเป็น

npm install

จากนั้นลองรันโปรแกรม โดยใช้คำสั่ง npm run dev -- --open

npm run dev -- --open

จากนั้นจะขึ้นหน้าเว็บ localhost:5173 แสดงข้อความ 2 บรรทัดนี้ (แบบตัวอักษรเท่ากัน) แสดงว่ารันโปรแกรมเรียบร้อย

ขั้นต่อไป เริ่มเขียนโปรแกรม โดยให้กลับมาที่ Terminal แล้วกด Ctrl+C เพื่อหยุดการรันโปรแกรม

เริ่มเขียน Code

หลังจากที่สร้างโปรเจคและลองรันจนเรียบร้อยแล้ว ต่อไปให้เปิด VS Code โดยใช้คำสั่ง code . หรือเปิดโปรแกรม Code แล้ว Open Folder my-project ที่สร้างไว้

code .

ที่ด้านซ้ายของ VS Code ให้เข้าไปที่ Folder /src/routes/ แล้วเปิดไฟล์ +page.svelte จะพบ Code ดังนี้

<h1>Welcome to SvelteKit</h1>
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>

เริ่มต้นด้วยการใส่ Style โดยใช้ Tailwindcss class

ต่อให้ลองใส่ Style ให้ Header โดยระบุชื่อ class ใน <h1> ดังนี้

<h1 class="text-3xl font-bold">Welcome to SvelteKit</h1>
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>

จากนั้นรันโปรแกรมผ่าน VS Code โดยเปิดหน้า Terminal (หรือกด Ctrl+` ) แล้วใช้คำสั่งรันโปรแกรม ดังนี้

npm run dev -- --open

ถ้าสำเร็จจะแสดงข้อความ Welcome to SvelteKit เป็นตัวอักษรตัวใหญ่ จาก class="text-3xl font-bold" ที่เราใส่ไว้ใน tag <h1> เป็นที่เรียบร้อย

เริ่มใช้ตัวแปรใน Svelte

ต่อไปจะเป็นการประกาศตัวแปร name แล้วนำไปแทนที่คำว่า SvelteKit โดยให้สลับมาที่หน้าจอ Code ที่ไฟล์ /src/routes/+page.svelte ให้เพิ่ม <script> แล้วใส่ code ประกาศตัวแปร name และใส่ {name} แทนคำว่า SvelteKit ดังนี้

<script>
    let name = "Kosol"
</script>

<h1 class="text-3xl font-bold">Welcome to {name}</h1>
<p>Visit <a href="https://kit.svelte.dev">kit.svelte.dev</a> to read the documentation</p>

จากนั้นกด Ctrl+S เพื่อบันทึก แล้วสลับไปที่ Browser เพื่อดูผลลัพธ์ (หน้าเว็บจะรีเฟรชใหม่ให้อัตโนมัติเมื่อบันทึก)

เล่นกับ $state โดยสร้างปุ่ม Counter

ขั้นต่อไปจะเป็นการเพิ่มปุ่ม Counter โดยมีตัวเลขบอกจำนวนครั้งที่กดปุ่ม โดยไปที่ไฟล์ /src/routes/+page.svelte แล้วประกาศตัวแปร count โดยให้มีค่าเริ่มต้นเป็น 0 และเพิ่มปุ่มให้แสดงค่า count ดังนี้ (โดยให้ลบ Tag <p> ออกก่อน)

<script>
  let name = "Kosol";
  let count = 0;
</script>

<h1 class="text-3xl font-bold">Welcome to {name}</h1>

<button class="bg-blue-500 px-8 py-1 rounded">{count}</button>

จากนั้นบันทึกไฟล์ แล้วดูผลลัพธ์เห็นปุ่มที่มีเลข 0 ลองกดปุ่มดูจะยังไม่เกิดอะไรขึ้น

ต่อไปสั่งให้ปุ่มทำการเพิ่มค่า count ทีละ 1 เมื่อมีการกดปุ่มดังนี้

<script>
  let name = "Kosol";
  let count = $state(0);
</script>

<h1 class="text-3xl font-bold">Welcome to {name}</h1>

<button class="bg-blue-500 px-8 py-1 rounded" onclick={() => count++}
  >{count}</button
>

จากนั้นบันทึกไฟล์แล้วลองกดปุ่มดู จะเห็นว่าตัวเลขจะถูกเพิ่มเมื่อมีการกดปุ่ม

เล่นกับ $derived ช่วยคูณ 2 ให้หน่อย

ต่อมาเราจะเพิ่มการแสดงเลขด้านข้างเป็น 2 เท่าของ counter โดยเพิ่ม code ดังนี้

<script>
  let name = "Kosol";
  let count = $state(0);
  let double = $derived(count * 2);
</script>

<h1 class="text-3xl font-bold">Welcome to {name}</h1>

<button class="bg-blue-500 px-8 py-1 rounded" onclick={() => count++}
  >{count}</button
>
<div>{count} x 2 = {double}</div>

เมื่อบันทึกแล้วลองกดปุ่ม จะเห็นตัวเลขบรรทัดล่างแสดงค่าผลคูณให้เห็น

ลองเล่น $effect สำหรับจัดการเมื่อ State เปลี่ยนแปลง

เพิ่ม code ใน Tag <script> ดังนี้

<script>
  let name = "Kosol";
  let count = $state(0);
  let double = $derived(count * 2);
  $effect(() => {
    if (count > 12) {
      alert("Over 12");
      count = 12;
    }
  });
</script>

<h1 class="text-3xl font-bold">Welcome to {name}</h1>

<button class="bg-blue-500 px-8 py-1 rounded" onclick={() => count++}
  >{count}</button
>
<div>{count} x 2 = {double}</div>

จากนั้นบันทึกแล้วลองกดปุ่มจนขึ้นเลข 12 และเมื่อกดอีกครั้งจะขึ้น Alert ขึ้นมา แล้วเปลี่ยนค่า counter ให้อยู่ที่ 12 เท่านั้น

ถึงตรงนี้จะเห็นว่าการเล่นกับ $state $derived $effect ไม่ได้ยากหรือซับซ้อนเท่าไหร่

ลองเล่น $props รับส่ง parameter ระหว่างกัน

เริ่มต้นจากการจัดระเบียนใหม่ ให้ปุ่มกับตัวคูณที่เราสร้างไว้ไปอยู่ใน Component แล้วค่อยเรียกใช้จากหน้าหลัก โดยไปที่ /src/lib แล้วสร้าง Folder ชื่อ components และเพิ่มไฟล์ชื่อ Counter.svelte ดังนี้

จากนั้นย้าย Code จากหน้า /src/routes/+page.svelte มาไว้ที่ counter.svelte ดังนี้

<script>
  let name = "Kosol";
  let count = $state(0);
  let double = $derived(count * 2);
  $effect(() => {
    if (count > 12) {
      alert("Over 12");
      count = 12;
    }
  });
</script>

<h1 class="text-3xl font-bold">Welcome to {name}</h1>

<button class="bg-blue-500 px-8 py-1 rounded" onclick={() => count++}
  >{count}</button
>
<div>{count} x 2 = {double}</div>

โดยไฟล์ /src/routes/+page.svelte ให้เอา code ที่ย้ายไปออก แล้วใส่ Code เพื่อเรียกใช้ Counter component ดังนี้

<script>
  import Counter from "$lib/components/counter.svelte";
</script>

<Counter />

จากนั้นบันทึกไฟล์ทั้งหมดแล้วไปดูที่ Browser ควรแสดงผลลัพธ์ให้เห็นเหมือนเดิม ดังนี้

ต่อไปจะเริ่มใช้ $props ในการส่งค่าจาก /src/routes/+page.svelte เพื่อส่งคำว่า "Svelte 5" ไปแทนคำว่า "Kosol" ใน Counter Component

โดยเริ่มจากทำการเพิ่มการรับผ่าน $props() ในไฟล์ /src/lib/components/counter.svelte ดังนี้

<script>
  let { name = "Kosol" } = $props();
  let count = $state(0);
  let double = $derived(count * 2);
  $effect(() => {
    if (count > 12) {
      alert("Over 12");
      count = 12;
    }
  });
</script>

<h1 class="text-3xl font-bold">Welcome to {name}</h1>

<button class="bg-blue-500 px-8 py-1 rounded" onclick={() => count++}
  >{count}</button
>
<div>{count} x 2 = {double}</div>

ส่วนไฟล์ /src/routes/+page.svelte ให้ส่งค่า name="Svelte 5" ดังนี้

<script>
  import Counter from "$lib/components/counter.svelte";
</script>

<Counter name="Svelte 5" />

จากนั้นบันทึกไฟล์ทั้งหมดแล้วดูผลลัพธ์จะมีคำว่า "Svelte 5" ที่ส่งไปจาก +page.svelte ให้เห็น

More from this blog

ทำไมทำ Index ไว้แล้วไม่ช่วยให้เร็วขึ้น

เคยสงสัยไหม ทำไม Table ที่มี Index เยอะมากๆ เสียพื้นที่เก็บ Index เพิ่มขึ้นเยอะแยะมากมายแล้ว แต่ก็ยังช้าอยู่ ตรวจสอบ Execution Plan แล้วก็ไม่เห็นเอา Index ที่สร้างไว้มาใช้งาน สาเหตุหลักเลยคือ SQL Server มองว่าเอามาใช้แล้วไม่ได้ช่วยให้เร็วขึ้น หรือมี ...

Sep 8, 20243 min read

SQL Server Isolation Level - Lock ให้ตรงใจไม่ให้โดนด่า

วันนี้เรามาดูปัญหาเกี่ยวกับ รอ จากการ Lock ของ SQL Server ว่าเราสามารถตรวจสอบว่าโปรแกรมที่ช้าเกิดจากประมวลผลช้า หรือ รออะไรอยู่ทำไมถึงนานแสนนานกว่าจะทำอะไรได้แต่ละที จะรู้ได้อย่างไรว่าโดน Lock อยู่ ? วิธีแรกแบบ GUI สามารถดูจาก Activity Monitor ว่ามี ...

Sep 8, 20241 min read

แนะนำแนวทางการใช้ ssh-key แทนการใส่รหัสผ่านทุกครั้งที่เชื่อมต่อ ssh

ที่มา สำหรับคนที่จำเป็นต้องใช้ ssh สำหรับ remote ไปที่เครื่อง server แล้วไม่อยากที่จะต้องคอยใส่รหัสผ่านทุกครั้งไป สามารถใช้วิธีนี้ในการสร้างคีย์ แล้วเอา public key ไปไว้ที่เครื่อง Server ได้ง่ายๆ ดังนี้ 1. ที่เครื่องเรา (ssh client) ให้สร้าง key โดยใ...

May 8, 20242 min read
K

Kosol

6 posts