Angular State Management

நிலை மேலாண்மை நுட்பங்களைக் கற்றுக்கொள்ளுங்கள்

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() அழைக்கிறது.

Single source of truth: ஒரு அம்சத்திற்கு ஒற்றை மூல உண்மையை ஒரு சேவையில் வைத்திருங்கள்; தேவைப்படும் இடத்தில் உட்செலுத்தவும்
Encapsulate updates: புதுப்பிப்புகளுக்கான முறைகளை வெளிப்படுத்தவும்; கூறுகளிலிருந்து நேரடியாக நிலையை மாற்றுவதைத் தவிர்க்கவும்
Derived values: கணக்கிடப்பட்ட சிக்னல்களுடன் மதிப்புகளைப் பெறவும்; பக்க விளைவுகளை (நிலைத்தன்மை போன்றவை) சேவையில் வைக்கவும்
Stream interop: RxJS-அடிப்படையிலான APIs உடன் இடைநிலை செய்ய வேண்டியபோது மட்டுமே ஸ்ட்ரீம்களுக்கு பாலம் அமைக்கவும்

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()

நிலை மேலாண்மை வினாடி வினா

பகிரப்பட்ட அம்ச நிலை பொதுவாக Angular-ல் எங்கு இருக்க வேண்டும்?

கூறு உள்ளூர் மாறிகளுக்குள்
✗ தவறு! கூறு உள்ளூர் மாறிகள் கூறுகளுக்கு இடையில் பகிரப்படுவதில்லை
சிக்னல்களைப் பயன்படுத்தும் ஒரு சேவையில் (ஒரு ஸ்டோர்)
✓ சரி! சிக்னல்களுடன் கூடிய சேவைகள் கூறுகளுக்கிடையே நிலையை பகிர்வதற்கும் நிர்வகிப்பதற்கும் ஒரு சுத்தமான வழியை வழங்குகின்றன
உலகளாவிய சாளர பண்புகளாக
✗ தவறு! உலகளாவிய சாளர பண்புகள் Angular-ன் செயல்பாட்டுத் தன்மை மற்றும் சார்பு உட்செலுத்தலை முறியடிக்கின்றன
அடுத்தது