NgRx sentiasa menjadi perpustakaan yang dipercayai untuk mengurus keadaan dalam aplikasi Angular. Dengan pengenalan API Isyaratnya, pembangun kini mempunyai cara yang lebih diperkemas untuk mengendalikan perubahan keadaan dan kesan sampingan. Untuk mengendalikan kesan sampingan tersebut, pasukan NgRx baru-baru ini memperkenalkan Kaedah isyarat yang memudahkan aliran kerja reaktif dan menjadikannya lebih intuitif.
Dalam artikel ini, saya akan menyelami SignalMethod, mempamerkan cara ia berfungsi melalui contoh praktikal dan sebab ia merupakan tambahan yang sangat baik pada kit alat Sudut anda.
The signalMethod ialah utiliti yang diperkenalkan oleh NgRx yang membolehkan anda menguruskan kesan sampingan dengan cara yang bersih dan reaktif. Tidak seperti pendekatan tradisional yang mungkin bergantung pada pengendali RxJS atau pengurusan kesan manual, signalMethod membolehkan anda menumpukan pada perkara yang penting: logik untuk mengendalikan perubahan.
Ia mencapai ini dengan menggabungkan isyarat dengan fungsi pemproses. Fungsi ini bertindak balas terhadap perubahan dalam inputnya, sama ada nilai statik atau isyarat reaktif. Hasilnya ialah cara yang fleksibel namun berkuasa untuk mengendalikan tindakan yang didorong oleh kerajaan.
Mari kita mulakan dengan contoh mudah: log mesej apabila nombor berganda. Begini cara anda boleh mencapai ini menggunakan signalMethod:
import { Component } from '@angular/core'; import { signalMethod } from '@ngrx/signals'; @Component({ selector: 'app-math-logger', template: `<button (click)="increment()">Increment</button>` }) export class MathLoggerComponent { private counter = signal(1); // Define the signal method readonly logDoubledValue = signalMethod<number>((value) => { const doubled = value * 2; console.log(`Doubled Value: ${doubled}`); }); increment() { this.counter.set(this.counter() + 1); this.logDoubledValue(this.counter); } }
Di sini, logDoubledValue digunakan apabila kaedah kenaikan dipanggil. Nilai kaunter dihantar ke signalMethod, yang kemudiannya mencatatkan nilai dua kali ganda. Contoh ini menunjukkan betapa mudahnya signalMethod disepadukan dengan isyarat untuk bertindak balas terhadap perubahan keadaan.
Andaikan anda sedang mengusahakan sistem pemantauan suhu. Daripada mengelog nilai dua kali ganda, anda perlu memaklumkan pengguna jika suhu melebihi ambang. Dengan signalMethod, ini menjadi mudah:
@Component({ selector: 'app-temperature-monitor', template: `<button (click)="increaseTemperature()">Increase Temperature</button>` }) export class TemperatureMonitorComponent { private temperature = signal(20); // Start at 20°C readonly alertHighTemperature = signalMethod<number>((temp) => { if (temp > 30) { console.warn('Warning: High temperature detected!'); } }); increaseTemperature() { this.temperature.set(this.temperature() + 5); this.alertHighTemperature(this.temperature); } }
Setiap kali suhu meningkat, kaedah alertHighTemperature menilai nilai baharu dan mengeluarkan amaran jika ia terlalu tinggi.
Dalam sesetengah kes, anda mungkin mentakrifkan signalMethod dalam perkhidmatan dan bukannya terus dalam komponen. Ini membolehkan penggunaan semula yang lebih baik tetapi memerlukan pengurusan kesan sampingan yang teliti untuk mengelakkan kebocoran memori.
Ini contohnya:
import { Injectable } from '@angular/core'; import { signalMethod } from '@ngrx/signals'; @Injectable({ providedIn: 'root' }) export class ScoreService { readonly logScore = signalMethod<number>((score) => { console.log(`Current Score: ${score}`); }); }
Sekarang, katakan komponen menggunakan perkhidmatan ini:
@Component({ selector: 'app-score-tracker', template: `<button (click)="updateScore()">Update Score</button>` }) export class ScoreTrackerComponent { private scoreService = inject(ScoreService); private score = signal(0); updateScore() { this.score.set(this.score() + 10); this.scoreService.logScore(this.score); // Signal-driven action } }
Untuk mengelakkan kebocoran memori, pastikan anda menyuntik konteks komponen apabila menggunakan perkhidmatan dalam senario dinamik:
import { Injector } from '@angular/core'; @Component({ /* ... */ }) export class ScoreTrackerComponent { private injector = inject(Injector); private scoreService = inject(ScoreService); private score = signal(0); updateScore() { this.score.set(this.score() + 10); this.scoreService.logScore(this.score, { injector: this.injector }); } }
Berbanding dengan alat lain seperti kesan, signalMethod menawarkan beberapa kelebihan yang berbeza:
Walaupun signalMethod sesuai untuk mengendalikan kesan sampingan yang jelas dalam aliran kerja reaktif, terdapat senario di mana RxJS mungkin lebih sesuai—terutamanya untuk aliran kompleks atau kes yang melibatkan keadaan perlumbaan. Walau bagaimanapun, untuk aplikasi yang memanfaatkan isyarat NgRx, signalMethod mencapai keseimbangan sempurna antara kesederhanaan dan kuasa.
Method isyarat NgRx ialah penukar permainan untuk mengendalikan kesan sampingan dalam aplikasi Sudut. Dengan menggabungkan keanggunan isyarat dengan fleksibiliti fungsi pemproses, ia memudahkan corak reaktif sambil mengekalkan kawalan ke atas pembersihan dan kebergantungan.
Jika anda menggunakan Isyarat NgRx dalam projek anda, saya amat mengesyorkan anda meneroka Kaedah isyarat untuk menyelaraskan pengendalian kesan sampingan anda. Cubalah dan alami bagaimana ia boleh menjadikan aplikasi Angular anda lebih bersih dan lebih reaktif!
Atas ialah kandungan terperinci Meningkatkan Kesan Sampingan dalam Sudut dengan Kaedah isyarat NgRx. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!