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

การประกอบสโตร์และการเข้าถึงข้ามสโตร์

การใช้สโตร์หนึ่งภายในอีกสโตร์หนึ่ง รูปแบบการประกอบสโตร์ และการหลีกเลี่ยงการขึ้นต่อกันแบบวนรอบ

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

store สามารถใช้ store อื่นได้

app จริงมีหลาย store ที่ต้องใช้งานร่วมกัน store ตะกร้าอาจต้องใช้ store การยืนยันตัวตนเพื่อทราบผู้ใช้ปัจจุบัน Pinia ทำให้ การเข้าถึงข้าม store เป็นเรื่องตรงไปตรงมา

การเรียก store ภายในแอ็กชัน

ภายในแอ็กชัน เพียงเรียกคอมโพสิเบิลของ store อื่น เนื่องจากแอ็กชันทำงานหลังจาก Pinia พร้อมใช้งานแล้ว วิธีนี้จึงปลอดภัย

import { useAuthStore } from './auth'

export const useCartStore = defineStore('cart', {
  state: () => ({ items: [] }),
  actions: {
    checkout() {
      const auth = useAuthStore()
      if (!auth.isLoggedIn) return
      // proceed with auth.userId
    }
  }
})

ไวยากรณ์ของ store แบบตั้งค่า

นอกจากวัตถุตัวเลือกแล้ว defineStore ยังรับ ฟังก์ชันตั้งค่า ได้ด้วย รูปแบบคล้ายกับการตั้งค่าของคอมโพเนนต์ คือประกาศรีฟและค่าคำนวณ แล้วส่งคืนค่าเหล่านั้น

import { ref, computed } from 'vue'

export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  return { count }
})

สถานะในรูปรีฟ

ใน store แบบตั้งค่า ทุก ref หรือ reactive ที่คุณส่งคืนจะกลายเป็น สถานะ ใช้ ref สำหรับค่าพื้นฐาน และใช้ reactive สำหรับวัตถุ

export const useUserStore = defineStore('user', () => {
  const name = ref('Coddy')
  const profile = reactive({ age: 30 })
  return { name, profile }
})

ตัวอ่านค่าในรูปค่าคำนวณ

computed ที่ส่งคืนมาจะทำหน้าที่เป็น ตัวอ่านค่า โดยจะถูกเก็บไว้เพื่อใช้ซ้ำและตอบสนองต่อการเปลี่ยนแปลง เช่นเดียวกับตัวอ่านค่าใน store แบบตัวเลือก

export const useCounterStore = defineStore('counter', () => {
  const count = ref(2)
  const doubled = computed(() => count.value * 2)
  return { count, doubled }
})

แอ็กชันในรูปฟังก์ชัน

ฟังก์ชันที่ส่งคืนมาจะเป็น แอ็กชัน ซึ่งสามารถอ่านและเขียนรีฟได้โดยตรงผ่าน .value

export const useCounterStore = defineStore('counter', () => {
  const count = ref(0)
  function increment() { count.value++ }
  return { count, increment }
})

การส่งคืนรีฟและค่าคำนวณ

กฎสำคัญของ store แบบตั้งค่าคือ ส่งคืนทุกอย่างที่คุณต้องการเปิดเผย สิ่งใดที่ไม่ได้ส่งคืนจะยังคงเป็นข้อมูลส่วนตัวของ store

export const useStore = defineStore('s', () => {
  const visible = ref(0)
  const secret = ref('hidden') // not returned -> private
  return { visible }
})

การใช้ข้าม store ใน store แบบตั้งค่า

ใน store แบบตั้งค่า คุณสามารถเรียก store อื่นในระดับบนสุด แล้วใช้ store นั้นในค่าคำนวณหรือแอ็กชันได้

export const useCartStore = defineStore('cart', () => {
  const auth = useAuthStore()
  const canCheckout = computed(() => auth.isLoggedIn)
  return { canCheckout }
})

การหลีกเลี่ยงการพึ่งพาแบบวนรอบ

หาก store A นำเข้า store B และ B นำเข้า A คุณอาจพบ การพึ่งพาแบบวนรอบ หลีกเลี่ยงการเรียก store อื่นที่ระดับบนสุดของโมดูล แต่ให้เรียก ภายในแอ็กชันหรือตัวอ่านค่าที่จำเป็นต้องใช้แทน

// Risky: top-level use in both directions
// Safe: call useOtherStore() lazily inside the action
actions: {
  doWork() {
    const other = useOtherStore() // resolved at call time
  }
}

เหตุใดการเรียกแบบเลื่อนเวลาจึงช่วยได้

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

store แบบตัวเลือกเทียบกับ store แบบตั้งค่า

ทั้งสองรูปแบบมีความสามารถเท่าเทียมกัน เลือก store แบบตัวเลือก หากต้องการโครงสร้างแบบประกาศที่คุ้นเคย และเลือก store แบบตั้งค่า เมื่อต้องการความยืดหยุ่นเต็มรูปแบบของเอพีไอแบบการประกอบ เช่น ตัวเฝ้าดูหรือคอมโพสิเบิลภายใน store

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับการประกอบสโตร์เข้าด้วยกัน

บทสรุป

คุณได้เรียนรู้การประกอบสโตร์เข้าด้วยกันดังนี้

  • เรียก composable ของสโตร์อื่นภายในแอ็กชันเพื่อเข้าถึงข้อมูลข้ามสโตร์
  • สโตร์แบบตั้งค่าใช้ฟังก์ชัน โดย refs คือสถานะ computed คือ getter และฟังก์ชันคือแอ็กชัน
  • ส่งคืนทุกสิ่งที่ต้องการเปิดให้ใช้งาน
  • เรียกสโตร์แบบทำงานเมื่อจำเป็นภายในฟังก์ชัน เพื่อหลีกเลี่ยงการพึ่งพากันแบบวนรอบ

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

บทเรียน “การประกอบสโตร์และการเข้าถึงข้ามสโตร์” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การประกอบสโตร์และการเข้าถึงข้ามสโตร์”

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

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

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

บทเรียน “การประกอบสโตร์และการเข้าถึงข้ามสโตร์” ใช้เวลานานแค่ไหน

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

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

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

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

  1. Pinia เทียบกับ Vuex: เหตุผลที่ควรเปลี่ยน
  2. defineStore: สถานะ Getter และ Action
  3. การประกอบสโตร์และการเข้าถึงข้ามสโตร์
  4. การคงอยู่ของ Pinia และ DevTools
← กลับไปที่ Vue Academy