SignalState утилита

SignalState — это легкая утилита для маленького стейта. Это не SignalStore. А просто утилита, которая позволяет превратить все свойства объекта рекурсивно в сигналы и удобно их изменять.

readonly person = signalState<Person>({
  id: 1,
  name: 'John Doe',
  address: {
    street: '123 Main St',
    city: 'Anytown',
    state: 'CA',
  }
});

Теперь, обращаясь к любому свойству person (помещая его в переменную) мы получаем сигнал, который создается «на лету» (не предварительно все становится сигналами). Такой себе аналог computed, можно сказать.

readonly address = this.person.address; //signal
readonly street = this.person.address.street; //signal

Способы обновления

Вместо методов setили update, как у обычных сигналов, здесь у нас есть метод patchState.

Первым параметром передаем сам объект (signalState) для обновления, а вторым — объект с обновленными полями либо метод, принимающий предыдущее значение.

setName() {
  patchState(this.person, {
    name: 'Jane Doe'
  });
}

updateId() {
  patchState(this.person, p => ({
    id: p.id + 1,
  }));
}

updateAddress() {
 patchState(this.person, p => ({
   address: {
     ...p.address,
     street: '456 Elm St'
   }
 }));
}

 

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *