Angular シグナルは、Angular アプリケーションの状態管理と反応性に対する革新的なアプローチを表します。この包括的なガイドでは、基本概念から高度な実装まで、シグナルについて知っておくべきことをすべて説明します。
シグナルは、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: シグナルと BehaviorSubject の違いは何ですか?
A: シグナルはよりシンプルでパフォーマンスが高く、Angular の変更検出に直接統合されています。 BehaviorSubject は、手動のサブスクリプション管理を必要とする RxJS オブザーバブルです。
Q: NgRx でシグナルを使用できますか?
A: はい、NgRx がグローバル アプリケーションの状態を処理する一方で、Signals はローカル コンポーネントの状態について NgRx を補完できます。
Q: シグナルは従来のプロパティ バインディングを置き換えますか?
A: いいえ、シグナルは追加ツールです。リアクティブな状態管理が必要な場合にこれらを使用しますが、より単純な場合には従来のプロパティ バインディングも引き続き有効です。
Q: シグナルは古い Angular バージョンでも利用できますか?
A: シグナルは Angular 16 で導入されました。古いバージョンの場合は、RxJS オブザーバブルなどの代替手段を使用する必要があります。
Angular Signals は、アプリケーションでリアクティブな状態管理を処理するための強力かつ効率的な方法を提供します。このガイドで概説されている例とベスト プラクティスに従うことで、独自のプロジェクトにシグナルを実装する準備が整います。まずは簡単なパターンから始めて、ニーズが高まるにつれて徐々に高度なパターンを組み込んでいくようにしてください。
シグナルをマスターする鍵は、練習し、その反応的な性質を理解することです。まずは基本的な例を実装し、概念に慣れてきたらより複雑なシナリオに進みます。
以上が基本から上級まで: 角度信号を段階的にマスターするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。