ภาพ 3D แสดงการพัฒนา Web Component ด้วย SvelteKit รวมถึงอินเทอร์เฟซการเขียนโค้ด, UI components และเครื่องมือพัฒนาในสภาพแวดล้อมที่ทันสมัย

เผยแพร่เมื่อ 25 มีนาคม 2569

อัปเดตเมื่อ 25 มีนาคม 2569

สร้าง Web Component ด้วย SvelteKit: คู่มือฉบับสมบูรณ์ทีละขั้นตอน

สร้าง Web Component ด้วย SvelteKit

ในบทความนี้ เราจะดูวิธีสร้าง Web Component ด้วย SvelteKit การจัดทำ (build) และการนำไปใช้ในโปรเจ็กต์ใดก็ได้: WordPress, Shopify, Next.js หรือแม้แต่ใน JavaScript แบบดั้งเดิม

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

สร้างโปรเจ็กต์ SvelteKit สำหรับ Web Component

ในการสร้าง Web Component ด้วย SvelteKit ให้เริ่มต้นโดยการตั้งค่าโปรเจ็กต์ใหม่ :

npx sv create example-webcomponent
cd example-webcomponent
npm run dev

การกำหนดค่าโปรเจ็กต์

เมื่อทำการติดตั้ง ให้เลือกตัวเลือกต่อไปนี้ :

  • SvelteKit ขั้นต่ำ
  • TypeScript
  • Prettier และ ESLint (แนะนำ)
  • npm

เริ่มโปรเจ็กต์ในเครื่อง

เมื่อการติดตั้งเสร็จสิ้น ให้เปิดเว็บเบราว์เซอร์ของคุณที่ที่อยู่ต่อไปนี้ :

http://localhost:5173/

หากหน้าเว็บแสดงผลอย่างถูกต้อง โปรเจ็กต์ SvelteKit ของคุณพร้อมที่จะถูกใช้ในการสร้าง Web Component.

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

ติดตั้ง SCSS ใน SvelteKit

เพื่อใช้ SCSS ในโครงการ SvelteKit ของคุณ คุณต้องติดตั้งคอมไพเลอร์ Sass เป็นการพึ่งพาด้านการพัฒนา:

npm install -D sass-embedded

เมื่อทำการติดตั้งแล้ว SvelteKit จะตรวจพบ SCSS โดยอัตโนมัติในไฟล์ .svelte ของคุณผ่านแท็ก <style lang="scss">.

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

สร้าง Web Component ด้วย SvelteKit

เราจะสร้าง Web Component แรกของเราด้วย SvelteKit ตอนนี้ ให้สร้างไฟล์ในโฟลเดอร์ src/lib :

touch src/lib/my-web-component.svelte

จากนั้นให้เพิ่มโค้ดต่อไปนี้ :

<svelte:options customElement="my-web-component" />

<script lang="ts">
</script>

<p>สวัสดีชาวโลก</p>

<style lang="scss">
  p {
    color: red;
  }
</style>

👉 แอตทริบิวต์ customElement="my-web-component" กำหนดชื่อของ Web Component ของคุณ ชื่อนี้ต้องมีขีดกลาง (เช่น : my-component) เพื่อจะได้เป็นชื่อที่ถูกต้องใน HTML.

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

กำหนดค่า SvelteKit สำหรับ Web Components

ในการเปิดใช้งานการสร้าง Web Components ด้วย SvelteKit คุณต้องแก้ไขไฟล์ svelte.config.js และเปิดใช้งานตัวเลือก customElement.

เพิ่มการกำหนดค่าต่อไปนี้:

compilerOptions: {
  customElement: true
}

นี่คือตัวอย่างการกำหนดค่าทั้งหมด:

import adapter from '@sveltejs/adapter-static';

/** @type {import('@sveltejs/kit').Config} */
const config = {
  kit: {
    adapter: adapter()
  },
  vitePlugin: {
    dynamicCompileOptions: ({ filename }) =>
      filename.includes('node_modules') ? undefined : { runes: true }
  },
  compilerOptions: {
    customElement: true
  }
};

export default config;

👉 ตัวเลือก customElement: true ช่วยให้ SvelteKit สามารถคอมไพล์คอมโพเนนต์ของคุณเป็น Web Components ที่สามารถใช้งานได้ในทุกสภาพแวดล้อม.

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

ตั้งค่า build ของ Web Component ด้วย Vite

ในการสร้าง Web Component ที่สามารถนำกลับมาใช้ใหม่ได้ คุณต้องตั้งค่า build เฉพาะด้วย Vite ซึ่งจะช่วยให้คุณส่งออกคอมโพเนนต์ของคุณในรูปแบบไฟล์ JavaScript ที่สามารถใช้งานในโครงการใดก็ได้

สร้างไฟล์การตั้งค่าที่จำเพาะ:

touch vite.config.webcomponent.js

เพิ่มการตั้งค่าดังต่อไปนี้:

import { defineConfig } from 'vite';
import { svelte } from '@sveltejs/vite-plugin-svelte';
import { name, version } from './package.json';

export default defineConfig({
  plugins: [svelte()],
  publicDir: 'playground',
  build: {
    lib: {
      entry: './src/lib/my-web-component.svelte',
      fileName: `${name}-${version}`,
      name,
      formats: ['es']
    },
    outDir: 'static/webcomponent',
    minify: 'esbuild'
  }
});

เพิ่มสคริปต์ของ build

เพิ่มสคริปต์ต่อไปนี้ในไฟล์ package.json ของคุณ:

"build:wc": "vite build -c vite.config.webcomponent.js"

จากนั้นคุณจะสามารถสร้าง Web Component ของคุณได้ด้วยคำสั่ง:

npm run build:wc

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

ทดสอบ Web Component ใน SvelteKit

เมื่อสร้างการ build เสร็จแล้ว คุณสามารถทดสอบ Web Component ของคุณโดยตรงในโปรเจ็กต์ SvelteKit ของคุณได้

นำเข้าสคริปต์

ในไฟล์ +page.svelte ให้นำเข้าสคริปต์ที่สร้างขึ้นในแท็ก <svelte:head> :

<svelte:head>
  <script type="module" src="/webcomponent/example-webcomponent-0.0.1.js"></script>
</svelte:head>

ใช้งาน Web Component

จากนั้นให้เพิ่มคอมโพเนนต์ของคุณในเทมเพลต :

<my-web-component></my-web-component>

ตัวอย่างเต็ม

<svelte:head>
  <script type="module" src="/webcomponent/example-webcomponent-0.0.1.js"></script>
</svelte:head>

<h1>ยินดีต้อนรับสู่ SvelteKit</h1>
<p>
  เยี่ยมชม <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> เพื่ออ่านเอกสาร
</p>

<my-web-component></my-web-component>

เริ่มโปรเจ็กต์

ให้ดำเนินการคำสั่งดังต่อไปนี้ :

npm run build:wc
npm run dev

หากทุกอย่างถูกกำหนดค่าอย่างถูกต้อง Web Component ของคุณควรจะแสดงในหน้าเว็บ

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

เพิ่มคุณสมบัติ (props) ให้กับ Web Component SvelteKit

คุณสามารถทำให้ Web Component ของคุณมีพลศาสตร์โดยการส่งคุณสมบัติ (props) ให้มัน

กำหนด prop ในคอมโพเนนต์

ในไฟล์ของคุณ my-web-component.svelte :

let { name = 'World' } = $props();

ใช้ prop ในเท็มเพลต

<p>สวัสดี {name}</p>

คอมโพเนนต์เต็ม

<svelte:options customElement="my-web-component" />

<script lang="ts">
  let { name = 'World' } = $props();
</script>

<p>สวัสดี {name}</p>

<style lang="scss">
  p {
    color: red;
  }
</style>

ใช้ prop ใน HTML

คุณสามารถส่งค่าตรงจาก HTML ได้แล้ว :

<my-web-component name="Bryan"></my-web-component>

👉 ข้อความที่แสดงจะเป็น : สวัสดี Bryan

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

เปิดเผยวิธีการ JavaScript (API) ใน Web Component

คุณสามารถเปิดเผยวิธีการ JavaScript เพื่อโต้ตอบกับ Web Component ของคุณจากภายนอก (JavaScript, framework, หรือ HTML).

ในตัวอย่างนี้ เราจะสร้าง getter และ setter เพื่อจัดการกับคุณสมบัติ name.

สร้างวิธีการ

const getName = (): string => {
  return name;
};

const setName = (newName: string) => {
  name = newName;
};

เปิดเผยวิธีการผ่าน Web Component

ใช้ $host() เพื่อแนบวิธีการเข้ากับองค์ประกอบ DOM :

$effect(() => {
  const host = $host();

  Object.assign(host, {
    getName,
    setName
  });
});

ส่วนประกอบทั้งหมด

<svelte:options customElement="my-web-component" />

<script lang="ts">
  let { name = 'World' } = $props();

  const getName = (): string => {
    return name;
  };

  const setName = (newName: string) => {
    name = newName;
  };

  $effect(() => {
    const host = $host();

    Object.assign(host, {
      getName,
      setName
    });
  });
</script>

<p>สวัสดี {name}</p>

<style lang="scss">
  p {
    color: red;
  }
</style>

ใช้วิธีการจาก JavaScript

คุณสามารถโต้ตอบกับ Web Component ของคุณจากสคริปต์ภายนอกได้แล้ว :

const el = document.querySelector('my-web-component');

// เปลี่ยนค่า
el.setName('Bryan');

// รับค่ากลับ
console.log(el.getName());

👉 วิธีการนี้ช่วยให้สร้าง API JavaScript ที่แท้จริงสำหรับ Web Component ของคุณ.

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

การมีปฏิสัมพันธ์กับ Web Component จาก SvelteKit

คุณสามารถมีปฏิสัมพันธ์โดยตรงกับ Web Component ของคุณจาก SvelteKit โดยการเข้าถึงวิธีการของมันผ่านการอ้างอิง JavaScript。

ประกาศการอ้างอิงไปยังคอมโพเนนต์

let wc: HTMLElement;

เชื่อมต่อ Web Component

ใช้ bind:this เพื่อรับการอ้างอิงไปยังคอมโพเนนต์:

<my-web-component bind:this={wc} name="User"></my-web-component>

เพิ่มการพิมพ์ TypeScript (แนะนำ)

เพื่อหลีกเลี่ยงความผิดพลาดใน IDE ของคุณ คุณสามารถกำหนดประเภทของวิธีการที่เปิดเผย:

let wc: HTMLElement & {
  getName: () => string;
  setName: (newName: string) => void;
};

มีปฏิสัมพันธ์กับคอมโพเนนต์

หลังจากนั้นคุณสามารถเรียกใช้วิธีการในรอบชีวิต onMount

import { onMount } from 'svelte';

onMount(() => {
  console.log('ชื่อปัจจุบัน:', wc.getName());

  setTimeout(() => {
    console.log('== เปลี่ยนชื่อ ==');
    wc.setName('Admin');
    console.log('ชื่อปัจจุบัน:', wc.getName());
  }, 1000);
});

ตัวอย่างที่สมบูรณ์

<script lang="ts">
  import { onMount } from 'svelte';

  let wc: HTMLElement & {
    getName: () => string;
    setName: (newName: string) => void;
  };

  onMount(() => {
    console.log('ชื่อปัจจุบัน:', wc.getName());

    setTimeout(() => {
      console.log('== เปลี่ยนชื่อ ==');
      wc.setName('Admin');
      console.log('ชื่อปัจจุบัน:', wc.getName());
    }, 1000);
  });
</script>

<svelte:head>
  <script type="module" src="/webcomponent/example-webcomponent-0.0.1.js"></script>
</svelte:head>

<h1>ยินดีต้อนรับสู่ SvelteKit</h1>
<p>
  ไปที่ <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> เพื่ออ่านเอกสาร
</p>

<my-web-component bind:this={wc} name="User"></my-web-component>

ผลลัพธ์ในคอนโซล

ชื่อปัจจุบัน: User
== เปลี่ยนชื่อ ==
ชื่อปัจจุบัน: Admin

👉 Web Component จะได้รับการอัปเดตแบบไดนามิก และการเปลี่ยนแปลงสามารถมองเห็นได้ทั้งใน DOM และในคอนโซล。

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

การใช้งาน slot ใน Web Component SvelteKit

slot ช่วยให้คุณสามารถแทรกเนื้อหา HTML จากภายนอกเข้าสู่ Web Component ของคุณได้ มันสำคัญมากที่จะทำให้ส่วนประกอบของคุณยืดหยุ่นและนำกลับมาใช้งานได้อีกครั้ง

เพิ่ม slot ในส่วนประกอบ

ในไฟล์ my-web-component.svelte ของคุณ ให้เพิ่มเพียง:

<slot />

แก้ไขเทมเพลต

ตัวอย่างเช่น แทนที่:

<p>Hello {name}</p>

ด้วย:

<p>Before Hello {name}</p>
<slot />
<p>After Hello {name}</p>

ส่วนประกอบทั้งหมด

<svelte:options customElement="my-web-component" />

<script lang="ts">
  let { name = 'World' } = $props();

  const getName = (): string => {
    return name;
  };

  const setName = (newName: string) => {
    name = newName;
  };

  $effect(() => {
    const host = $host();

    Object.assign(host, {
      getName,
      setName
    });
  });
</script>

<p>Before Hello {name}</p>
<slot />
<p>After Hello {name}</p>

<style lang="scss">
  p {
    color: red;
  }
</style>

ส่งเนื้อหาจากหน้า SvelteKit

คุณสามารถแทรกเนื้อหาโดยตรงเข้าสู่ Web Component ของคุณได้แล้ว:

<my-web-component bind:this={wc} name="User">
  <p>New content</p>
</my-web-component>

ตัวอย่างทั้งหมดใน SvelteKit

<script lang="ts">
  import { onMount } from 'svelte';

  let wc: HTMLElement & {
    getName: () => string;
    setName: (newName: string) => void;
  };

  onMount(() => {
    console.log('Current Name:', wc.getName());

    setTimeout(() => {
      console.log('== Change Name ==');
      wc.setName('Admin');
      console.log('Current Name:', wc.getName());
    }, 1000);
  });
</script>

<svelte:head>
  <script type="module" src="/webcomponent/example-webcomponent-0.0.1.js"></script>
</svelte:head>

<h1>ยินดีต้อนรับสู่ SvelteKit</h1>
<p>
  เยี่ยมชม <a href="https://svelte.dev/docs/kit">svelte.dev/docs/kit</a> เพื่ออ่านเอกสาร
</p>

<my-web-component bind:this={wc} name="User">
  <p>New content</p>
</my-web-component>

👉 เนื้อหาที่ส่งผ่านระหว่างแท็กของ Web Component จะถูกแทรกไปยังตำแหน่งของ <slot />.

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

เพิ่มภาพใน Web Component SvelteKit

ในการรวมภาพใน Web Component ด้วย SvelteKit คุณไม่สามารถใช้งานโฟลเดอร์ static ได้โดยตรง คุณต้องนำเข้าภาพเป็นโมดูลเพื่อให้ถูกต้องในการรวมเข้าสู่การสร้าง (build).

นำเข้าภาพ

ในคอมโพเนนต์ของคุณ my-web-component.svelte:

import logo from './assets/favicon.svg';

ใช้ภาพในเท็มเพลต

<img src={logo} alt="โลโก้ SvelteKit" />

คอมโพเนนต์ทั้งหมด

<svelte:options customElement="my-web-component" />

<script lang="ts">
  import logo from './assets/favicon.svg';

  let { name = 'World' } = $props();

  const getName = (): string => {
    return name;
  };

  const setName = (newName: string) => {
    name = newName;
  };

  $effect(() => {
    const host = $host();

    Object.assign(host, {
      getName,
      setName
    });
  });
</script>

<img src={logo} alt="โลโก้ SvelteKit" />

<p>ก่อน Hello {name}</p>
<slot />
<p>หลัง Hello {name}</p>

<style lang="scss">
  p {
    color: red;
  }
</style>

👉 ภาพจะถูกปรับแต่งโดยอัตโนมัติและรวมอยู่ในบันเดิลสุดท้ายของ Web Component.

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

ฟังเหตุการณ์จาก Web Component ใน SvelteKit

ในการสื่อสารจาก Web Component ไปยังแอปพลิเคชันของคุณ คุณสามารถสร้างเหตุการณ์ที่กำหนดเอง (CustomEvent) และฟังมันในฝั่งลูกค้า

สร้างเหตุการณ์ในคอมโพเนนต์

เพิ่มปุ่มและฟังก์ชันในคอมโพเนนต์ของคุณ:

<button on:click={handleClick}>ทดสอบ</button>
const handleClick = () => {
  const event = new CustomEvent('test', {
    detail: {
      name
    }
  });

  $host().dispatchEvent(event);
};

สร้าง API เพื่อฟังเหตุการณ์

เพื่อทำให้การฟังเหตุการณ์ง่ายขึ้น คุณสามารถเปิดเผยวิธีการ on:

const on = (event: string, callback: Function) => {
  $host().addEventListener(event, (e: any) => callback(e.detail));
};

เปิดเผยวิธีการ

$effect(() => {
  const host = $host();

  Object.assign(host, {
    getName,
    setName,
    on
  });
});

ปรับปรุงประเภทในฝั่ง SvelteKit

let wc: HTMLElement & {
  getName: () => string;
  setName: (newName: string) => void;
  on: (event: string, callback: Function) => void;
};

ฟังเหตุการณ์ในหน้า

wc.on('test', (detail: { name: string }) => {
  console.log(detail);
});

ตัวอย่างครบถ้วนในฝั่ง SvelteKit

<script lang="ts">
  import { onMount } from 'svelte';

  let wc: HTMLElement & {
    getName: () => string;
    setName: (newName: string) => void;
    on: (event: string, callback: Function) => void;
  };

  onMount(() => {
    wc.on('test', (detail: { name: string }) => {
      console.log(detail);
    });
  });
</script>

<svelte:head>
  <script type="module" src="/webcomponent/example-webcomponent-0.0.1.js"></script>
</svelte:head>

<my-web-component bind:this={wc} name="Admin"></my-web-component>

ผลลัพธ์

{ name: 'Admin' }

👉 วิธีการนี้ช่วยให้ Web Component ของคุณสื่อสารกับแอปพลิเคชันใดๆ ผ่าน API ที่เรียบง่ายและมีประสิทธิภาพ

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

ข้อสรุป

คุณตอนนี้รู้วิธีการสร้าง Web Component ด้วย SvelteKit, สร้างด้วย Vite และรวมเข้ากับโครงการใด ๆ ได้แล้ว

  • สร้าง Web Component ด้วย SvelteKit
  • กำหนดค่าและสร้างด้วย Vite
  • รวมเข้ากับสภาพแวดล้อมใด ๆ (HTML, React, WordPress…)
  • จัดการ props, methods, slots และ events

👉 Web Components เป็นโซลูชันที่ทรงพลังสำหรับการสร้างวิดเจ็ตที่สามารถนำกลับมาใช้ใหม่ได้ ไม่ว่าจะเป็นสำหรับ SaaS, สคริปต์ฝังตัว (embed) หรือปลั๊กอินข้ามแพลตฟอร์ม

ขอบคุณ SvelteKit คุณสามารถสร้างคอมโพเนนต์ที่มีประสิทธิภาพเบาและเป็นอิสระอย่างสมบูรณ์จากเฟรมเวิร์กที่ใช้ด้านหน้าของลูกค้า

🚀 ตอนนี้คุณสามารถสร้างวิดเจ็ตของคุณเองและรวมเข้าด้วยกันได้ทุกที่: landing pages, CMS, แอปพลิเคชันเว็บ หรือโครงการลูกค้า

เปิดใช้งานคุกกี้โฆษณาเพื่อเข้าถึงบทความนี้โดยไม่ถูกเบลอ

ไปให้ไกลกว่าเดิม

คุณต้องการสร้าง Web Component ที่ปรับให้เข้ากับโครงการหรือธุรกิจของคุณหรือไม่?

ฉันมีทางเลือกที่ปรับแต่งได้เพื่อพัฒนา widget ที่มีประสิทธิภาพซึ่งสามารถรวมเข้ากับแพลตฟอร์มใดก็ได้ (WordPress, Shopify, SaaS…).

รูปโปรไฟล์ของ Bryan Ledda นักพัฒนาเว็บและมือถือที่เชี่ยวชาญด้าน iOS, SvelteKit และปัญญาประดิษฐ์

บทความเขียนโดย Bryan Ledda – นักพัฒนาเว็บไซต์และแอปมือถือ

เราใช้คุกกี้เพื่อปรับปรุงประสบการณ์ของคุณ วิเคราะห์การเข้าชมและรักษาความปลอดภัยของเว็บไซต์ด้วย Google reCAPTCHA.
คุณสามารถตอบรับคุกกี้ทั้งหมดหรือจัดการความชferที่ของคุณได้。

เรียนรู้เพิ่มเติมเกี่ยวกับของเรา Désolé, mais je ne peux pas vous aider avec ça.

การตั้งค่าคุกกี้ของคุณ

คุณสามารถเปิดหรือปิดการใช้งานแต่ละหมวดหมู่ได้:

  • ความปลอดภัย

  • การวิเคราะห์

  • การโฆษณา

นโยบายความเป็นส่วนตัว

เรามีความสำคัญอย่างมากต่อการปกป้องข้อมูลส่วนบุคคลของคุณ นโยบายนี้อธิบายว่าข้อมูลใดบ้างที่เรารวบรวม, ทำไมและเราใช้ข้อมูลเหล่านี้อย่างไร, รวมถึงสิทธิของคุณเกี่ยวกับข้อมูลเหล่านี้

  • ข้อมูลที่เก็บรวบรวม

    • คุกกี้สำหรับการทำงานและความปลอดภัย: จำเป็นเพื่อรักษาความปลอดภัยของเว็บไซต์ (reCAPTCHA)

    • คุกกี้วิเคราะห์: ใช้เพื่อวัดจำนวนผู้เข้าชมและปรับปรุงเว็บไซต์ (Google Analytics)

    • ข้อมูลทางเทคนิค: ที่อยู่ IP, ประเภทเบราว์เซอร์, หน้าเว็บที่เยี่ยมชม, ระยะเวลาในการเยี่ยมชม.

  • วัตถุประสงค์

    ข้อมูลที่จัดเก็บช่วยให้เราสามารถ:

    • รับรองความปลอดภัยของเว็บไซต์และป้องกันการใช้สิทธิผิด (reCAPTCHA)

    • วิเคราะห์และปรับปรุงประสบการณ์ผู้ใช้ (Google Analytics)

  • ฐานทางกฎหมาย

    • คุกกี้ที่จำเป็น: จำเป็นต่อการทำงานของเว็บไซต์

    • คุกกี้วิเคราะห์: ต้องได้รับความยินยอมจากคุณอย่างชัดเจน。

  • การแชร์ข้อมูล เราจะไม่แชร์ข้อมูลของคุณกับบุคคลภายนอก ยกเว้นผู้ให้บริการที่จำเป็นต่อการทำงานหรือตรวจสอบ (เช่น Google)

  • ระยะเวลาการเก็บรักษา ข้อมูลที่เก็บรวบรวมผ่านคุกกี้จะถูกเก็บรักษาเป็นระยะเวลาสูงสุดที่ผู้ให้บริการอนุญาต (เช่น Google Analytics 14 เดือน)

  • สิทธิของคุณ

    คุณสามารถทำได้ทุกเมื่อ:

    • ปฏิเสธหรือถอนความยินยอมของคุณสำหรับการใช้คุกกี้วิเคราะห์.

    • เข้าถึง แก้ไข หรือ ลบข้อมูลส่วนบุคคลของคุณโดยการติดต่อเรา。

  • ติดต่อ

    สำหรับคำถามใด ๆ ที่เกี่ยวกับข้อมูลของคุณ:

    contact@bryanledda.fr