Contents

หลุดพ้นจากการเจาะ Vue Prop ด้วยการจัดหา/ฉีด

Vue เสนอวิธีการจัดการกระแสข้อมูลและการสื่อสารระหว่างส่วนประกอบหลายวิธี ความท้าทายทั่วไปในฐานะนักพัฒนา Vue คือการเจาะลึก โดยที่คุณส่งข้อมูลผ่านส่วนประกอบหลายชั้น นำไปสู่ฐานโค้ดที่ซับซ้อนและบำรุงรักษาได้น้อยกว่า

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

ทำความเข้าใจปัญหาการเจาะเสาค้ำ

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

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

พิจารณาโครงสร้างลำดับชั้นของส่วนประกอบดังกล่าวเป็นแบบจำลอง ซึ่งทำหน้าที่ในการอธิบาย:

⭐ แอป

⭐ ส่วนประกอบหลัก

⭐ ส่วนประกอบย่อย

⭐ส่วนประกอบแกรนด์

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

จัดเตรียม/ฉีด คืออะไร?

Vue แก้ไขความท้าทายนี้ด้วยวิธีการ

องค์ประกอบของผู้ให้บริการ

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

 <!-- App.vue -->
<template>
  <div>
    <!-- ... -->
    <ParentComponent/>
  </div>
</template>

<script setup>
import { provide } from 'vue';
import ParentComponent from './components/ParentComponent.vue';

const greeting = 'Hello from Provider';

provide('greeting', greeting);
</script>

ข้อความที่กำหนดจะอธิบายองค์ประกอบของผู้ให้บริการใน JavaScript ซึ่งให้สถานะหรือค่าที่ใช้ร่วมกันระหว่างส่วนประกอบย่อย เพื่อให้ส่วนประกอบได้รับข้อมูลที่แชร์นี้ จะต้องกำหนดตัวระบุที่ไม่ซ้ำกันโดยใช้แอตทริบิวต์’key’ด้วยการกำหนดคีย์ด้วยชื่อเดียวกันกับตัวแปรที่ให้มา จะช่วยเพิ่มความสามารถในการอ่านและการบำรุงรักษาโดยรวมของโค้ดเบส

ส่วนประกอบสืบทอด

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

 <script setup>
import { inject } from 'vue';

const injectedData = inject('greeting');
</script>

ส่วนประกอบที่สืบทอดจะแทรกข้อมูลที่ให้มาและสามารถดึงข้อมูลภายในโครงร่างเป็นเอนทิตีที่คั่นด้วยภายในเครื่อง

ตอนนี้ให้พิจารณาภาพด้านล่าง:

/th/images/screenhot-of-the-four-components-from-app-component-to-the-grandchild-component.jpg

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

ด้วยการใช้ส่วนประกอบ GrandChild เป็นตัวกลางระหว่างส่วนประกอบของแอปและส่วนประกอบหลักหรือย่อย จึงสามารถบรรลุวิธีการส่งข้อมูลที่มีประสิทธิภาพมากขึ้น ซึ่งช่วยลดความจำเป็นในการส่งข้อมูลผ่านส่วนประกอบระดับกลางที่ไม่จำเป็นสำหรับการทำงานที่เหมาะสม จึงทำให้การสื่อสารภายในแอปพลิเคชันคล่องตัวขึ้น

การให้ข้อมูลในระดับแอป (ทั่วโลก)

คุณสมบัติการจัดหา/แทรกของ Vue ช่วยให้สามารถจัดเตรียมข้อมูลในระดับแอป ซึ่งทำหน้าที่เป็นวิธีการที่แพร่หลายในการเผยแพร่ข้อมูลและการกำหนดค่าระหว่างส่วนประกอบต่างๆ ที่กระจายไปทั่วแอปพลิเคชัน Vue

พิจารณาตัวอย่างต่อไปนี้ซึ่งมีการตกแต่งข้อมูลบนพื้นฐานทั่วทั้งแพลตฟอร์ม:

 // main.js

import { createApp } from 'vue'
import App from './App.vue'

const globalConfig = {
  apiUrl: 'https://example.com/api',
  authKey: 'my-secret-key',
  // Other configuration settings...
};

app.provide('globalConfig', globalConfig);

createApp(App).mount('#app')

พิจารณาสถานการณ์ที่แอปพลิเคชันจำเป็นต้องมีพื้นที่เก็บข้อมูลการกำหนดค่าที่ครอบคลุมซึ่งครอบคลุมแง่มุมต่างๆ เช่น Application Programming Interfaces (API) ข้อมูลรับรองการตรวจสอบผู้ใช้ และพารามิเตอร์เพิ่มเติม

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

 <template>
  <div>
    <h1>API Settings</h1>
    <p>API URL: {{ globalConfig.apiUrl }}</p>
    <p>Authentication Key: {{ globalConfig.authKey }}</p>
  </div>
</template>

<script setup>
import { inject } from 'vue';

const globalConfig = inject('globalConfig');
</script>

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

ประโยชน์และการใช้การให้และการฉีด

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

โค้ดที่สะอาดขึ้นและเพิ่มประสิทธิภาพมากขึ้น

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

ระบบปฏิกิริยาของ Vue ได้รับการออกแบบเพื่อให้ส่วนประกอบต่างๆ ได้รับการอัปเดตเฉพาะเมื่อมีการเปลี่ยนแปลงในการขึ้นต่อกันที่เกี่ยวข้องเท่านั้น กลไกที่ให้มา/แทรกช่วยให้การแบ่งปันข้อมูลมีประสิทธิภาพ ส่งผลให้ประสิทธิภาพดีขึ้นผ่านการเรนเดอร์ที่ไม่จำเป็นให้เหลือน้อยที่สุด

ปรับปรุงการห่อหุ้มส่วนประกอบ

การดำเนินการจัดเตรียม/ฉีดช่วยเพิ่มการห่อหุ้มของแต่ละส่วนประกอบโดยกำหนดให้ส่วนประกอบย่อยเกี่ยวข้องกับข้อมูลที่พวกเขาตั้งใจใช้เท่านั้น ซึ่งจะช่วยลดการพึ่งพาส่วนประกอบเหล่านี้ตามการจัดเรียงข้อมูลเฉพาะขององค์ประกอบหลัก

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

การฉีดพึ่งพา

การให้หรือการแทรกการขึ้นต่อกันผ่านการฉีดการขึ้นต่อกันทำหน้าที่เป็นวิธีที่ตรงไปตรงมาในการปรับใช้บริการและการกำหนดค่าระดับโลก เช่น ไคลเอนต์ API, จุดสิ้นสุด, การกำหนดค่าตามความชอบของผู้ใช้ หรือการจัดเก็บข้อมูล ซึ่งส่วนประกอบต่างๆ ที่ต้องการจะเข้าถึงได้ทันที วิธีการนี้ช่วยรักษาความสม่ำเสมอตลอดทั้งแอปพลิเคชัน

จุดสำคัญที่ควรพิจารณาเมื่อใช้ Provide และ Inject

แม้จะมีประโยชน์มากมาย แต่เราต้องใช้ความระมัดระวังเมื่อใช้วิธีการจัดเตรียมและวิธีการฉีดเพื่อป้องกันผลกระทบที่ไม่ได้ตั้งใจเกิดขึ้น

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

เพื่ออำนวยความสะดวกในการทำความเข้าใจและบำรุงรักษาส่วนประกอบแต่ละส่วน โดยเฉพาะอย่างยิ่งภายในการตั้งค่าการทำงานร่วมกัน สิ่งสำคัญคือต้องจัดทำเอกสารบริการที่จัดเตรียมโดยองค์ประกอบหลักและการขึ้นต่อกันที่กำหนดโดยองค์ประกอบรอง

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

จัดเตรียม/ฉีดตัวเลือกที่ดีที่สุดสำหรับการจัดการสถานะใน Vue หรือไม่

ข้อได้เปรียบที่โดดเด่นประการหนึ่งที่ได้รับจากคุณสมบัติ ให้ และ ฉีด ของ Vue คือความสามารถในการอำนวยความสะดวกในการจัดการการไหลของข้อมูลและสถานะแอปพลิเคชันในส่วนประกอบต่างๆ ได้อย่างมีประสิทธิภาพ อย่างไรก็ตาม ประโยชน์เหล่านี้ไม่ได้ปราศจากข้อเสีย เนื่องจากการใช้ provide และ inject อาจทำให้เกิดปัญหาในแง่ของการดีบัก การทดสอบ และการบำรุงรักษาระบบซอฟต์แวร์ที่ซับซ้อน

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