Angular State Management
நிலை மேலாண்மை தரவு காலப்போக்கில் எவ்வாறு மாறுகிறது என்பதை ஒழுங்கமைக்கிறது.
State Management Essentials
Local first: கூறு சிக்னல்களுடன் தொடங்கவும்; பகிர்வு தேவைப்படும்போது மட்டுமே ஒரு சேவைக்கு (ஸ்டோர்) மேம்படுத்தவும்.
Signals: உள்ளூர் மற்றும் சேவை-ஆதரவு நிலைக்கு signal() பயன்படுத்தவும்; computed() மூலம் பெறவும்.
Interop: ஸ்ட்ரீம் குறிப்பியல் தேவைப்படும்போது மட்டுமே RxJS பயன்படுத்தவும்; உலகளாவிய நிலையை குறைவாக வைத்திருங்கள்.
Signal-based Store Example
import { Injectable, signal, computed, inject } from '@angular/core';
@Injectable({ providedIn: 'root' })
class CounterStore {
count = signal(0);
double = computed(() => this.count() * 2);
inc() { this.count.update(n => n + 1); }
}
// Component: const store = inject(CounterStore);
Jassif Team Notes:
Signals, Services, and Change Detection பற்றி காண்க.
எளிமையான சேவை + சிக்னல்களுடன் தொடங்கவும்; சிக்கலானது கோரும் போது மட்டுமே நூலகங்களை அடையவும்.
Service-backed Signals (Store)
கூறுகளுக்கு இடையே பகிர்வதற்கு நிலையை ஒரு சேவைக்கு உயர்த்தவும்.
இது மறுபயன்பாட்டை மேம்படுத்துகிறது.
Service Store Setup
import { Injectable, signal, inject } from '@angular/core';
@Injectable({ providedIn: 'root' })
class CounterStore {
count = signal(0);
inc() { this.count.update(n => n + 1); }
}
// Component usage
class App { store = inject(CounterStore); }
Complete Example
import { bootstrapApplication } from '@angular/platform-browser';
import { Component, Injectable, signal, inject } from '@angular/core';
@Injectable({ providedIn: 'root' })
class CounterStore {
count = signal(0);
inc() { this.count.update(n => n + 1); }
}
@Component({
selector: 'app-root',
standalone: true,
template: `
<h3>Service with Signals</h3>
<p>Count: {{ store.count() }}</p>
<button (click)="store.inc()">Increment</button>
`
})
class App { store = inject(CounterStore); }
bootstrapApplication(App);
Example Explained:
CounterStore: ஒரு சிக்னல் மற்றும் புதுப்பிப்பு முறையை (inc()) வைத்திருக்கும் ஒரு சேவை.
inject(CounterStore): கூறில் ஸ்டோரை மீட்டெடுக்கிறது (உருவாக்கி தேவையில்லை).
store.count(): டெம்ப்ளேட்டில் தற்போதைய மதிப்பைப் படிக்கவும்; பொத்தானைக் கிளிக் செய்வது store.inc() அழைக்கிறது.
Local vs Global State
இணைப்பைக் குறைக்க பெரும்பாலான நிலையை கூறுகளுக்கு உள்ளூராக வைத்திருங்கள்.
பல அம்சங்களுக்குத் தேவைப்படும்போது மட்டுமே பகிரப்பட்ட சேவைக்கு மேம்படுத்தவும்.
தனிமைப்படுத்துதல் விரும்பப்படும் போது வழங்குநர்களை அம்சம்/பாதை நிலையில் நோக்குநிலைப்படுத்தவும்.
Scoped State Providers
import { provideRouter, Routes } from '@angular/router';
const routes: Routes = [
{ path: '', component: Home, providers: [CounterStore] }
];
bootstrapApplication(App, { providers: [provideRouter(routes)] });
State Management Guidelines:
Promote state when: பல பாதைகள்/கூறுகளுக்கு ஒரே தரவு தேவைப்படும்போது அல்லது கேச்சிங் UX-ஐ மேம்படுத்தும்போது.
Separate UI state: UI நிலையை (வடிப்பான்கள், உரையாடல்கள்) சர்வர்/கேச் நிலையிலிருந்து பிரிக்கவும்; அவற்றை சுயாதீனமாக நிர்வகிக்கவும்.
Initialize lazily: முதல் பயன்பாட்டில் சோம்பேறியாகத் தொடங்கவும் மற்றும் மீட்டமைப்பு புள்ளிகளைக் கருத்தில் கொள்ளவும் (எ.கா., வெளியேற்றும் போது).
Local State
கூறுக்குள் கட்டுப்படுத்தப்பட்டது
சிறிய இணைப்பு
எளிதான சோதனை
எ.கா: படிவ நிலை, UI தொகுதிகள்
Global State
சேவை மூலம் பகிரப்படுகிறது
பல கூறுகளுக்கு தேவை
சிக்கலான நிர்வகிப்பு
எ.கா: பயனர் தகவல், கேச் செய்யப்பட்ட தரவு
State Management Patterns
| முறை | சிறந்தது எதற்கு | செயல்படுத்தல் |
|---|---|---|
| Component Signals | உள்ளூர் UI நிலை, படிவ கட்டுப்பாடுகள் | கூறு உள்ளே signal() |
| Service Store | பகிரப்பட்ட அம்ச நிலை | சிக்னல்களுடன் உட்செலுத்தக்கூடிய சேவை |
| Route-level State | அம்சம்-குறிப்பிட்ட தரவு | பாதை மட்டத்தில் வழங்குநர்கள் |
| Computed Signals | பெறப்பட்ட மதிப்புகள், மாற்றங்கள் | சேவை/கூறில் computed() |
| Effect Functions | பக்க விளைவுகள், நிலைத்தன்மை | சேவையில் effect() |