0Pricing
Angular Academy · Pelajaran

Effect dan Efek Samping

Tanggapi perubahan sinyal dengan effect.

Effect dan Efek Samping adalah pelajaran Angular Academy gratis di CoddyKit. Ini adalah pelajaran 2 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 Angular Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Angular Academy mencakup 4 pelajaran total.

Apa Itu Effect

effect() menjalankan sebuah fungsi setiap kali sinyal yang dibacanya berubah. Berbeda dari computed, effect digunakan untuk efek samping: pencatatan, sinkronisasi ke localStorage, pemanggilan API, dan manipulasi DOM.

Effect tidak mengembalikan nilai.

Membuat effect

Effect berjalan sekali segera, lalu berjalan kembali setiap kali sinyal yang dilacak berubah.

import { signal, effect } from '@angular/core';

const count = signal(0);

effect(() => {
  console.log('count is', count());
});
// logs "count is 0" immediately
count.set(5); // logs "count is 5"

Effect Memerlukan Konteks Injeksi

Secara default, effect() harus dibuat dalam konteks injeksi — biasanya di konstruktor atau penginisialisasi field sebuah komponen, direktif, atau layanan.

import { Component, signal, effect } from '@angular/core';

@Component({ selector: 'app-x', template: '' })
export class XComponent {
  user = signal('guest');
  constructor() {
    effect(() => console.log('user:', this.user()));
  }
}

Pelacakan Dependensi Otomatis

Seperti computed, effect melacak tepat sinyal yang dibacanya saat runtime. Pembacaan kondisional hanya dilacak ketika jalurnya tercapai.

const enabled = signal(true);
const value = signal(10);

effect(() => {
  if (enabled()) {
    console.log(value());
  }
});
// When enabled() is false, value is not a dependency

Menyinkronkan Sinyal ke localStorage

Kasus penggunaan effect yang umum: menyimpan state setiap kali state tersebut berubah.

const theme = signal('light');

effect(() => {
  localStorage.setItem('theme', theme());
});

theme.set('dark'); // writes "dark" to localStorage

Effect Tidak Mengembalikan Nilai

Jika Anda memerlukan nilai turunan, gunakan computed(). Effect digunakan untuk tindakan tanpa nilai kembalian; hasilnya adalah efek samping itu sendiri.

// WRONG: trying to derive state in an effect
// effect(() => this.total = this.a() + this.b());

// RIGHT: derive with computed
// total = computed(() => this.a() + this.b());

Menetapkan Sinyal di dalam Effect

Secara default, Angular melarang penulisan ke sinyal di dalam effect untuk mencegah loop. Jika Anda benar-benar memerlukannya, berikan { allowSignalWrites: true } — tetapi untuk derivasi, sebaiknya gunakan computed.

effect(() => {
  const v = source();
  derived.set(v * 2);
}, { allowSignalWrites: true });
// Use sparingly; computed() is usually better

Pembersihan Manual dengan EffectRef

effect() mengembalikan sebuah EffectRef. Panggil .destroy() untuk menghentikannya secara manual sebelum pemiliknya dihancurkan.

import { effect, EffectRef } from '@angular/core';

const ref = effect(() => console.log(value()));
// later
ref.destroy(); // effect no longer runs

Effect Dibersihkan Secara Otomatis

Ketika dibuat di dalam komponen, effect otomatis dihancurkan saat komponen tersebut dihancurkan. Anda hampir tidak pernah perlu memanggil .destroy() sendiri.

Effect Berjalan Setelah Render

Effect dijadwalkan dan berjalan setelah deteksi perubahan, dengan pengelompokan per mikro-tugas. Beberapa perubahan sinyal yang berlangsung sinkron hanya memicu effect sekali.

const a = signal(0);

effect(() => console.log(a()));

a.set(1);
a.set(2);
a.set(3);
// Effect runs once with the final value 3 (batched)

Kapan Menggunakan effect vs computed

computed: menghasilkan nilai dari sinyal (murni).
effect: merespons sinyal dengan melakukan sesuatu di luar sistem (tidak murni).

Jika Anda mendapati diri mengembalikan nilai dari effect, kemungkinan besar yang Anda perlukan adalah computed.

Pemeriksaan Singkat

Uji pemahaman Anda tentang effect.

Ringkasan: Effect

effect() menjalankan fungsi setiap kali sinyal yang dilacak berubah, dan digunakan hanya untuk efek samping.

  • Berjalan sekali segera, lalu setiap kali dependensi berubah.
  • Memerlukan konteks injeksi.
  • Dihancurkan otomatis bersama pemiliknya; mengembalikan EffectRef untuk kendali manual.
  • Gunakan computed untuk derivasi dan effect untuk tindakan.

Berikutnya: membersihkan sumber daya di dalam effect.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Effect dan Efek Samping” gratis?

Ya — teks lengkap “Effect dan Efek Samping” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Angular Academy, upgrade ke CoddyKit PRO. Kursus Angular Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Effect dan Efek Samping”?

Tanggapi perubahan sinyal dengan effect. Kamu berlatih Angular 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 Angular Academy?

Tidak diperlukan pengalaman sebelumnya. Angular 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 2 dari 4.

Berapa lama pelajaran “Effect dan Efek Samping” 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 Angular Academy ini?

Ya. Setiap pelajaran Angular 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

  1. Sinyal Terhitung
  2. Effect dan Efek Samping
  3. Pembersihan Effect dan Siklus Hidup
  4. linkedSignal dan Pola Lanjutan
← Kembali ke Angular Academy