0Pricing
Frontend Academy · Ders

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> | undefined

Varsayı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); // factory

Salt 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 mutate

App 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

  1. Bağımlılık Ekleme için provide() ve inject()
  2. Eşzamansız Bileşenler ve Suspense
  3. Özel Yönergeler
  4. Eklenti Sistemi: app.use()
← Frontend Academy Sayfasına Dön