Bağımlılık Ekleme için provide() ve inject()
Tam kapsamlı bir durum yönetimi kitaplığı kullanmadan özellikleri zincir boyunca aktarmaktan kaçınmak için değerleri üst bir bileşende sağlamayı ve ağaçta derinlerde eklemeyi öğrenin.
Bağımlılık Ekleme için provide() ve inject(), CoddyKit'te ücretsiz bir Frontend Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Frontend Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Frontend Academy kursu toplamda 4 dersten oluşur.
Özellikleri Aktarma Sorunu
Bazen veriler üst düzeydeki bir component'te bulunur ve derinlerdeki bir alt component'e ulaştırılması gerekir. Verileri aradaki her component'ten geçirmek (özellik aktarımı) zahmetli ve kırılgandır.
provide() — Değer Bildirme
Bir üst component, setup() içinde provide(key, value) çağırır. Değer, tüm alt component'ler tarafından kullanılabilir hâle gelir.
<!-- ParentComponent.vue -->
<script setup>
import { provide, ref } from 'vue';
const theme = ref('dark');
provide('theme', theme);
</script>inject() — Değer Kullanma
Herhangi bir alt component, değeri okumak için inject(key) çağırır.
<!-- DeepChild.vue -->
<script setup>
import { inject } from 'vue';
const theme = inject('theme');
</script>
<template>
<div :class="theme">Theme is: {{ theme }}</div>
</template>ref/reactive ile Reaktivite
Bir ref veya reactive nesne sağlarsanız alt component'ler reaktif bir değer alır; güncellemeler otomatik olarak yayılır.
// Parent
const user = reactive({ name: 'Alice', role: 'admin' });
provide('user', user);
// Anywhere descendant
const user = inject('user');
user.role; // 'admin' — reactiveÇakışmaları Önlemek için Symbol Anahtarları
Büyük app'lerde dize anahtarları çakışma riski taşır. Symbol'ler benzersizliği garanti eder; bunları ortak bir dosyada tanımlayın.
// keys.ts
export const ThemeKey = Symbol('theme');
export const UserKey = Symbol('user');
// Parent
provide(ThemeKey, ref('dark'));
// Child
const theme = inject(ThemeKey);TypeScript Desteği
Her iki tarafı da tür güvenli hâle getirmek için InjectionKey<T> kullanın.
import type { InjectionKey, Ref } from 'vue';
export const ThemeKey: InjectionKey<Ref<string>> = Symbol('theme');
// Provider:
provide(ThemeKey, ref('dark'));
// Consumer (type-checked):
const theme = inject(ThemeKey); // Ref<string> | undefinedVarsayılan Değerler
Hiçbir üst component anahtarı sağlamazsa inject, bir varsayılan değer iletmediğiniz sürece undefined döndürür.
const theme = inject('theme', 'light'); // default if missing
const lazy = inject('user', () => createDefaultUser(), true); // factorySalt Okunur Değer Sağlama
Alt component'lerin paylaşılan durumu değiştirmesini önlemek için readonly() ile sarın.
import { readonly } from 'vue';
const user = reactive({ name: 'Alice' });
provide('user', readonly(user));
// Children can read but cannot mutateApp Düzeyinde Değer Sağlama
Değerleri app düzeyinde sağlayarak her yerde kullanılabilir olmalarını sağlayın; bu, eklentiler için kullanışlıdır.
// main.ts
import { createApp } from 'vue';
import App from './App.vue';
const app = createApp(App);
app.provide('apiClient', new ApiClient());
app.mount('#app');Birleştirilebilir Sarmalayıcı
Daha temiz bir tüketici API'si için provide/inject işlemlerini bir birleştirilebilir içinde sarın.
// useTheme.ts
import { inject, type InjectionKey, type Ref } from 'vue';
export const ThemeKey: InjectionKey<Ref<string>> = Symbol('theme');
export function useTheme() {
const theme = inject(ThemeKey);
if (!theme) throw new Error('useTheme: no provider in tree');
return theme;
}provide/inject ve Pinia Karşılaştırması
provide/inject: hafiftir, kütüphane gerektirmez ve eklenti tarzı değerler (tema, yerel ayar, mevcut kullanıcı) için idealdir. Pinia: DevTools içeren tam kapsamlı durum yönetimi sunar ve karmaşık güncellemelere sahip app genelindeki reaktif durum için en uygunudur.
Hızlı Kontrol
Büyük bir Vue app'inde provide/inject kullanırken anahtar çakışmalarını önlemek için önerilen yöntem nedir?
Özet: provide/inject
Üst component sağlar, alt component alır; özellik aktarımı gerekmez. Reaktif değerler (ref/reactive) reaktif olarak yayılır. Tür güvenli ve çakışmasız enjeksiyon için Symbol anahtarlarını ve InjectionKey'i kullanın. inject'in ikinci argümanı olarak varsayılan bir değer sağlayın. Değişikliği önlemek için readonly() kullanın. App'ler arası eklentiler için app düzeyinde değer sağlayın. Eklenti tarzı değerler için Pinia'ya hafif bir alternatiftir.
Sıkça Sorulan Sorular
“Bağımlılık Ekleme için provide() ve inject()” dersi ücretsiz mi?
Evet — “Bağımlılık Ekleme için provide() ve inject()” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Frontend Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Frontend Academy kursu toplamda 4 dersten oluşur.
“Bağımlılık Ekleme için provide() ve inject()” dersinde ne öğreneceğim?
Tam kapsamlı bir durum yönetimi kitaplığı kullanmadan özellikleri zincir boyunca aktarmaktan kaçınmak için değerleri üst bir bileşende sağlamayı ve ağaçta derinlerde eklemeyi öğrenin. Frontend Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Frontend Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Frontend Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“Bağımlılık Ekleme için provide() ve inject()” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Frontend Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Frontend Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Bağımlılık Ekleme için provide() ve inject()
- Eşzamansız Bileşenler ve Suspense
- Özel Yönergeler
- Eklenti Sistemi: app.use()