Türlerle Türetilmiş Durum ve Seçiciler
Hesaplanan durum için türlendirilmiş seçici fonksiyonları yazın
Türlerle Türetilmiş Durum ve Seçiciler, CoddyKit'te ücretsiz bir TypeScript Academy dersidir. Bu, 4 dersinin 4. 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, TypeScript Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. TypeScript Academy kursu toplamda 4 dersten oluşur.
Türetilmiş Durum Nedir?
Türetilmiş durum, başka bir durumdan hesaplanan durumdur; örneğin bir listeyi filtrelemek veya değerleri toplamaktır. Seçiciler bu hesaplamayı kapsüller ve performans için belleğe alınabilir.
// Raw state
const users: User[] = [/* ... */];
// Derived state: active users only
const activeUsers = users.filter(u => u.isActive);Tür Güvenli Seçici İşlevleri
Ne hesapladıklarını belgelemek ve türlerin zamanla uyumsuzlaşmasını önlemek için açık dönüş türlerine sahip seçici işlevleri yazın.
import type { RootState } from "./store";
const selectActiveUsers = (state: RootState): User[] =>
state.users.filter((u) => u.isActive);
const selectUserCount = (state: RootState): number =>
state.users.length;reselect: Belleğe Alınmış Seçiciler
RTK tarafından kullanılan reselect kitaplığı, yalnızca girdileri değiştiğinde yeniden hesaplanan belleğe alınmış seçiciler oluşturur.
import { createSelector } from "reselect";
const selectActiveUsers = createSelector(
(state: RootState) => state.users,
(users) => users.filter((u) => u.isActive)
);
// Return type inferred: User[]Türü Belirlenmiş Parametreli Seçiciler
Fabrika seçicileri bağımsız değişkenleri kabul eder ve bir seçici döndürür; bu, varlık başına aramalar için kullanışlıdır.
const selectUserById = (id: string) =>
createSelector(
(state: RootState) => state.users,
(users) => users.find((u) => u.id === id) ?? null
);
// Usage: const user = useAppSelector(selectUserById("123"));Zustand Seçicileri
Zustand'da yalnızca gereken parçayı okumak için store kancasına türü belirlenmiş bir seçici geçirin.
const activeUsers = useUserStore((s) => s.users.filter(u => u.isActive));
// Inferred type: User[]useMemo ile React'te Türetilmiş Durum
Yerel türetilmiş durum için, bileşenlerde hesaplanan değerleri belleğe almak üzere uygun tür açıklamalarıyla useMemo kullanın.
const sortedUsers = useMemo(
(): User[] => [...users].sort((a, b) => a.name.localeCompare(b.name)),
[users]
);Seçicileri Birleştirme
Karmaşık seçicileri daha basit olanları birleştirerek oluşturun; reselect zincir boyunca belleğe almayı yönetir.
const selectActiveUserNames = createSelector(
selectActiveUsers,
(users) => users.map((u) => u.name)
); // string[]Türetilmiş Güncellemeler için immer ile Tür Güvenli Zustand
Türetilmiş güncellemeleri hesaplarken taslak durumu değiştirmek için immer kullanın; TypeScript yalnızca geçerli özelliklere dokunulmasını sağlar.
const useStore = create<AppStore>()(immer((set) => ({
users: [],
activeCount: 0,
setUsers: (users) =>
set((draft) => {
draft.users = users;
draft.activeCount = users.filter((u) => u.isActive).length;
}),
})));Seçici Dönüş Türünü Çıkarma
TypeScript, dönüş türlerini seçicilerden çıkarır; ancak açık açıklamalar okunabilirliği artırır ve dinamik ifadelerden yanlışlıkla any oluşmasını önler.
// Inferred — may widen to any for complex expressions
const selectTotals = createSelector(
(s: RootState) => s.cart.items,
(items) => items.reduce((sum, i) => sum + i.price, 0) // inferred: number
);Seçicileri Sınama
Seçiciler saf işlevlerdir; sahte durum geçirerek çıktı türünü ve değerini doğrulayın.
test("selectActiveUsers", () => {
const state = { users: [{ id: "1", isActive: true }, { id: "2", isActive: false }] } as RootState;
expect(selectActiveUsers(state)).toHaveLength(1);
});Özet: Tür Güvenli Seçiciler
Türleri belirlenmiş seçiciler: RootState alan işlevleri açık dönüş türleriyle yazın, belleğe alma için createSelector kullanın, karmaşık türetimler için seçicileri birleştirin ve bunları saf işlevler olarak sınayın.
Hızlı Kontrol
createSelector, sıradan bir seçici işlevine kıyasla hangi avantajı sağlar?
Öğrendikleriniz
Türleri belirlenmiş seçiciler RootState alır ve türleri tam olarak belirlenmiş türetilmiş değerler döndürür. Belleğe alma için createSelector kullanın, karmaşık mantık için seçicileri birleştirin ve parametreli varlık aramaları için fabrika seçicileri yazın.
Sıkça Sorulan Sorular
“Türlerle Türetilmiş Durum ve Seçiciler” dersi ücretsiz mi?
Evet — “Türlerle Türetilmiş Durum ve Seçiciler” 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 TypeScript Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. TypeScript Academy kursu toplamda 4 dersten oluşur.
“Türlerle Türetilmiş Durum ve Seçiciler” dersinde ne öğreneceğim?
Hesaplanan durum için türlendirilmiş seçici fonksiyonları yazın TypeScript 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.
TypeScript Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te TypeScript 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 4. dersidir.
“Türlerle Türetilmiş Durum ve Seçiciler” 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 TypeScript Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her TypeScript 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
- Redux Toolkit Dilimlerini ve Thunk'larını Türlendirme
- Zustand Store Türlendirme Örüntüleri
- XState: Türlendirilmiş Durum Makineleri
- Türlerle Türetilmiş Durum ve Seçiciler