Status Turunan dan Selector dengan Tipe
Tulis fungsi selector bertipe untuk status terhitung.
Status Turunan dan Selector dengan Tipe adalah pelajaran TypeScript Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar TypeScript Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus TypeScript Academy mencakup 4 pelajaran total.
Apa Itu State Turunan
State turunan adalah state yang dihitung dari state lain—misalnya memfilter daftar atau menjumlahkan nilai. Pemilih merangkum perhitungan ini dan dapat dimemoisasi untuk meningkatkan kinerja.
// Raw state
const users: User[] = [/* ... */];
// Derived state: active users only
const activeUsers = users.filter(u => u.isActive);Fungsi Pemilih Bertipe
Tulis fungsi pemilih dengan tipe hasil yang eksplisit untuk mendokumentasikan perhitungannya dan mencegah perubahan tipe yang tidak disengaja.
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: Pemilih Bermemo
Pustaka reselect (yang digunakan oleh RTK) membuat pemilih bermemo yang hanya menghitung ulang saat masukannya berubah.
import { createSelector } from "reselect";
const selectActiveUsers = createSelector(
(state: RootState) => state.users,
(users) => users.filter((u) => u.isActive)
);
// Return type inferred: User[]Pemilih Berparameter Bertipe
Pemilih pembuat menerima argumen dan mengembalikan pemilih—berguna untuk pencarian per entitas.
const selectUserById = (id: string) =>
createSelector(
(state: RootState) => state.users,
(users) => users.find((u) => u.id === id) ?? null
);
// Usage: const user = useAppSelector(selectUserById("123"));Pemilih Zustand
Dalam Zustand, teruskan pemilih bertipe ke kait store untuk membaca hanya bagian state yang diperlukan.
const activeUsers = useUserStore((s) => s.users.filter(u => u.isActive));
// Inferred type: User[]State Turunan dalam React dengan useMemo
Untuk state turunan lokal, gunakan useMemo dengan anotasi tipe yang tepat untuk menyimpan nilai hasil perhitungan dalam memo di komponen.
const sortedUsers = useMemo(
(): User[] => [...users].sort((a, b) => a.name.localeCompare(b.name)),
[users]
);Menggabungkan Pemilih
Bangun pemilih kompleks dengan menggabungkan pemilih yang lebih sederhana—reselect menangani memoisisasi di sepanjang rangkaian tersebut.
const selectActiveUserNames = createSelector(
selectActiveUsers,
(users) => users.map((u) => u.name)
); // string[]Zustand Aman secara Tipe dengan immer untuk Pembaruan Turunan
Saat menghitung pembaruan turunan, gunakan immer untuk mengubah state draf—TypeScript memastikan hanya properti yang valid yang disentuh.
const useStore = create<AppStore>()(immer((set) => ({
users: [],
activeCount: 0,
setUsers: (users) =>
set((draft) => {
draft.users = users;
draft.activeCount = users.filter((u) => u.isActive).length;
}),
})));Inferensi Tipe Hasil Pemilih
TypeScript menyimpulkan tipe hasil dari pemilih, tetapi anotasi eksplisit meningkatkan keterbacaan dan mencegah any yang tidak disengaja dari ekspresi dinamis.
// 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
);Menguji Pemilih
Pemilih adalah fungsi murni—ujilah dengan meneruskan state tiruan, lalu pastikan tipe dan nilai keluarannya sesuai.
test("selectActiveUsers", () => {
const state = { users: [{ id: "1", isActive: true }, { id: "2", isActive: false }] } as RootState;
expect(selectActiveUsers(state)).toHaveLength(1);
});Ringkasan: Pemilih Bertipe
Pemilih bertipe: tulis fungsi yang menerima RootState dengan tipe hasil eksplisit, gunakan createSelector untuk memoisisasi, gabungkan pemilih untuk perhitungan kompleks, dan uji pemilih tersebut sebagai fungsi murni.
Pemeriksaan Singkat
Keuntungan apa yang diberikan createSelector dibandingkan fungsi pemilih biasa?
Yang Anda Pelajari
Pemilih bertipe menerima RootState dan mengembalikan nilai turunan dengan tipe yang tepat. Gunakan createSelector untuk memoisisasi, gabungkan pemilih untuk logika kompleks, dan tulis pemilih pembuat untuk pencarian entitas berparameter.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Status Turunan dan Selector dengan Tipe” gratis?
Ya — teks lengkap “Status Turunan dan Selector dengan Tipe” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus TypeScript Academy, upgrade ke CoddyKit PRO. Kursus TypeScript Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Status Turunan dan Selector dengan Tipe”?
Tulis fungsi selector bertipe untuk status terhitung. Kamu berlatih TypeScript Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai TypeScript Academy?
Tidak diperlukan pengalaman sebelumnya. TypeScript Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Status Turunan dan Selector dengan Tipe” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran TypeScript Academy ini?
Ya. Setiap pelajaran TypeScript Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Menentukan Tipe Slice dan Thunk Redux Toolkit
- Pola Penentuan Tipe Store Zustand
- XState: Mesin Status Bertipe
- Status Turunan dan Selector dengan Tipe