0Pricing
Vue Academy · บทเรียน

Props และเหตุการณ์แบบกำหนดเอง

ส่งข้อมูลลงด้วย props และส่งเหตุการณ์ขึ้นไปยังคอมโพเนนต์แม่

Props และเหตุการณ์แบบกำหนดเอง เป็นบทเรียน Vue Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Vue Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Vue Academy มีบทเรียนทั้งหมด 3 บทเรียน

การสื่อสารระหว่างคอมโพเนนต์แม่กับลูก

คอมโพเนนต์สื่อสารกันได้สองทิศทาง

  • พร็อพส์ ส่งข้อมูลจากคอมโพเนนต์แม่ลงไปยังคอมโพเนนต์ลูก
  • เหตุการณ์ ส่งข้อความจากคอมโพเนนต์ลูกขึ้นไปยังคอมโพเนนต์แม่

การไหลของข้อมูลทางเดียวนี้ช่วยให้แอปคาดเดาพฤติกรรมได้ง่าย

การประกาศพร็อพส์

คอมโพเนนต์ลูกจะประกาศพร็อพส์ที่ยอมรับ ใน script setup ให้ใช้ defineProps

<script setup>
const props = defineProps(['title', 'count'])
</script>

<template>
  <h2>{{ title }}</h2>
  <p>{{ count }}</p>
</template>

พร็อพส์พร้อมชนิดข้อมูล

ประกาศพร็อพส์เป็นออบเจ็กต์เพื่อระบุชนิดข้อมูลสำหรับการตรวจสอบ

<script setup>
defineProps({
  title: String,
  count: Number,
  isActive: Boolean
})
</script>

พร็อพส์พร้อมค่าเริ่มต้นและค่าที่จำเป็น

คุณสามารถกำหนดให้พร็อพส์เป็นค่าที่จำเป็น และกำหนดค่าเริ่มต้นได้

<script setup>
defineProps({
  title: {
    type: String,
    required: true
  },
  count: {
    type: Number,
    default: 0
  }
})
</script>

การส่งพร็อพส์จากคอมโพเนนต์แม่

คอมโพเนนต์แม่ส่งข้อมูลในรูปแอตทริบิวต์ ใช้ : เพื่อผูกค่าแบบไดนามิก

<template>
  <ProductCard
    title="Coffee Mug"
    :count="stock"
    :is-active="available"
  />
</template>

<!-- static string vs bound expression -->

ธรรมเนียมการตั้งชื่อพร็อพส์

ประกาศพร็อพส์เป็น camelCase ใน JS และส่งพร็อพส์เป็น kebab-case ในเทมเพลต

  • พร็อพส์ใน JS: isActive
  • แอตทริบิวต์ในเทมเพลต: :is-active

Vue จะแปลงรูปแบบระหว่างทั้งสองแบบให้โดยอัตโนมัติ

พร็อพส์เป็นแบบอ่านอย่างเดียว

คอมโพเนนต์ลูกต้องไม่เปลี่ยนแปลงค่าพร็อพส์โดยตรง

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

การประกาศเหตุการณ์ที่ส่งออก

คอมโพเนนต์ลูกประกาศเหตุการณ์ที่ส่งออกด้วย defineEmits

<script setup>
const emit = defineEmits(['increment', 'delete'])
</script>

การส่งเหตุการณ์

เรียกใช้ฟังก์ชัน emit เพื่อส่งเหตุการณ์ขึ้นไป และอาจส่งข้อมูลประกอบไปด้วย

<script setup>
const emit = defineEmits(['add'])

function handleClick() {
  emit("add", { id: 1, name: "Item" })
}
</script>

<template>
  <button @click="handleClick">Add</button>
</template>

การส่งเหตุการณ์ใน Options API

ใน Options API ให้เรียกใช้ this.$emit แทน

export default {
  emits: ["save"],
  methods: {
    onSave() {
      this.$emit("save", this.formData)
    }
  }
}

คอมโพเนนต์แม่รับฟังเหตุการณ์

คอมโพเนนต์แม่รับฟังด้วย @event-name และรับข้อมูลประกอบของเหตุการณ์

<template>
  <TodoItem
    :task="task"
    @delete="removeTask"
    @add="onAdd"
  />
</template>

<script setup>
function onAdd(item) {
  console.log("Added:", item.name)
}
</script>

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับพร็อพส์และเหตุการณ์

ทบทวน: พร็อพส์และเหตุการณ์

คุณได้เรียนรู้การสื่อสารระหว่างคอมโพเนนต์

  • defineProps ใช้ประกาศพร็อพส์พร้อมชนิดข้อมูลและค่าเริ่มต้น
  • พร็อพส์ไหลลงทาง ลง และเป็นแบบอ่านอย่างเดียว
  • defineEmits ใช้ประกาศเหตุการณ์
  • emit("name", payload) ใช้ส่งเหตุการณ์ ขึ้น
  • คอมโพเนนต์แม่รับฟังด้วย @event

ถัดไป: สล็อตและสล็อตแบบมีขอบเขต

คำถามที่พบบ่อย

บทเรียน “Props และเหตุการณ์แบบกำหนดเอง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “Props และเหตุการณ์แบบกำหนดเอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Vue Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Vue Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “Props และเหตุการณ์แบบกำหนดเอง”

ส่งข้อมูลลงด้วย props และส่งเหตุการณ์ขึ้นไปยังคอมโพเนนต์แม่ คุณปฏิบัติ Vue Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Vue Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Vue Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 3 บทเรียน

บทเรียน “Props และเหตุการณ์แบบกำหนดเอง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Vue Academy นี้ได้ไหม

ได้ บทเรียน Vue Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การสร้างและลงทะเบียนคอมโพเนนต์
  2. Props และเหตุการณ์แบบกำหนดเอง
  3. สล็อตและสล็อตแบบมีขอบเขต
← กลับไปที่ Vue Academy