Angular 신호는 Angular 애플리케이션의 상태 관리 및 반응성에 대한 혁신적인 접근 방식을 나타냅니다. 이 포괄적인 가이드는 기본 개념부터 고급 구현까지 Signals에 대해 알아야 할 모든 것을 안내합니다.
신호는 반응 상태 관리를 처리하는 방법을 제공하는 Angular 16에 도입된 새로운 기본 요소입니다. 이는 해당 값이 변경될 때 관심 있는 소비자에게 알리는 값에 대한 특별한 래퍼입니다.
import { signal } from '@angular/core'; // Creating a simple signal const count = signal(0); // Reading signal value console.log(count()); // Output: 0 // Updating signal value count.set(1);
import { Component, signal } from '@angular/core'; @Component({ selector: 'app-counter', template: ` <div> <p>Count: {{ count() }}</p> <button (click)="increment()">Increment</button> </div> ` }) export class CounterComponent { count = signal(0); increment() { this.count.set(this.count() + 1); } }
const name = signal('John'); name.set('Jane');
const counter = signal(0); counter.update(value => value + 1);
const user = signal({ name: 'John', age: 25 }); user.mutate(value => { value.age = 26; });
계산된 신호는 다른 신호에서 자동으로 값을 얻습니다.
import { signal, computed } from '@angular/core'; const price = signal(100); const quantity = signal(2); const total = computed(() => price() * quantity()); console.log(total()); // Output: 200
효과를 사용하면 신호가 변경될 때 부작용을 수행할 수 있습니다.
import { signal, effect } from '@angular/core'; const message = signal('Hello'); effect(() => { console.log(`Message changed to: ${message()}`); }); message.set('Hi'); // Logs: "Message changed to: Hi"
interface Product { id: number; name: string; price: number; } @Component({ selector: 'app-shopping-cart', template: ` <div> <h2>Shopping Cart</h2> <div *ngFor="let item of cartItems()"> {{ item.name }} - ${{ item.price }} </div> <p>Total: ${{ cartTotal() }}</p> </div> ` }) export class ShoppingCartComponent { cartItems = signal<Product[]>([]); cartTotal = computed(() => this.cartItems().reduce((total, item) => total + item.price, 0) ); addToCart(product: Product) { this.cartItems.update(items => [...items, product]); } removeFromCart(productId: number) { this.cartItems.update(items => items.filter(item => item.id !== productId) ); } }
@Component({ selector: 'app-user-form', template: ` <form (submit)="handleSubmit($event)"> <input [value]="formData().name" (input)="updateName($event)" placeholder="Name" > <input [value]="formData().email" (input)="updateEmail($event)" placeholder="Email" > <button type="submit">Submit</button> </form> ` }) export class UserFormComponent { formData = signal({ name: '', email: '' }); updateName(event: Event) { const input = event.target as HTMLInputElement; this.formData.update(data => ({ ...data, name: input.value })); } updateEmail(event: Event) { const input = event.target as HTMLInputElement; this.formData.update(data => ({ ...data, email: input.value })); } handleSubmit(event: Event) { event.preventDefault(); console.log('Form submitted:', this.formData()); } }
// Good practice const userProfile = signal<UserProfile | null>(null); // Better practice with type safety interface UserProfile { name: string; email: string; } const userProfile = signal<UserProfile>({ name: '', email: '' });
성능 최적화
오류 처리
import { signal } from '@angular/core'; // Creating a simple signal const count = signal(0); // Reading signal value console.log(count()); // Output: 0 // Updating signal value count.set(1);
import { Component, signal } from '@angular/core'; @Component({ selector: 'app-counter', template: ` <div> <p>Count: {{ count() }}</p> <button (click)="increment()">Increment</button> </div> ` }) export class CounterComponent { count = signal(0); increment() { this.count.set(this.count() + 1); } }
const name = signal('John'); name.set('Jane');
Q: Signals와 BehaviorSubject의 차이점은 무엇인가요?
A: 신호는 더 간단하고 성능이 뛰어나며 Angular의 변경 감지에 직접 통합됩니다. BehaviorSubject는 수동 구독 관리가 필요한 RxJS 관찰 가능 항목입니다.
Q: NgRx에서 신호를 사용할 수 있나요?
A: 예, NgRx가 전역 애플리케이션 상태를 처리하는 동안 Signals는 로컬 구성 요소 상태에 대해 NgRx를 보완할 수 있습니다.
Q: 신호가 기존 속성 바인딩을 대체합니까?
A: 아니요. 신호는 추가 도구입니다. 반응형 상태 관리가 필요할 때 사용하세요. 하지만 더 단순한 경우에는 전통적인 속성 바인딩이 여전히 유효합니다.
Q: 이전 Angular 버전에서도 Signals를 사용할 수 있나요?
A: 신호는 Angular 16에서 도입되었습니다. 이전 버전의 경우 RxJS 관찰 가능 항목과 같은 대안을 사용해야 합니다.
Angular Signals는 애플리케이션에서 반응 상태 관리를 처리하는 강력하고 효율적인 방법을 제공합니다. 이 가이드에 설명된 예시와 모범 사례를 따르면 자신의 프로젝트에서 Signals를 구현할 수 있는 준비를 갖추게 됩니다. 간단하게 시작하고 요구사항이 증가함에 따라 점차적으로 고급 패턴을 통합하는 것을 잊지 마세요.
신호를 마스터하는 열쇠는 연습하고 신호의 반응성을 이해하는 것입니다. 기본 예제 구현부터 시작한 다음 개념에 익숙해지면 더 복잡한 시나리오로 진행하세요.
위 내용은 기초부터 고급까지: 단계별 각도 신호 마스터하기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!