6.6.3 • Published 17 days ago

@lwc/signals v6.6.3

Weekly downloads
-
License
MIT
Repository
github
Last release
17 days ago

@lwc/signals

This is an experimental package containing the interface expected for signals.

A key point to note is that when a signal is both bound to an LWC class member variable and used on a template, the LWC engine will attempt to subscribe a callback to rerender the template.

Reactivity with Signals

A Signal is an object that holds a value and allows components to react to changes to that value. It exposes a .value property for accessing the current value, and .subscribe methods for responding to changes.

import { signal } from 'some/signals';

export default class ExampleComponent extends LightningElement {
    count = signal(0);

    increment() {
        this.count.value++;
    }
}

In the template, we can bind directly to the .value property:

<template>
    <button onclick="{increment}">Increment</button>
    <p>{count.value}</p>
</template>

Supported APIs

This package supports the following APIs.

Signal

This is the shape of the signal that the LWC engine expects.

export type OnUpdate = () => void;
export type Unsubscribe = () => void;

export interface Signal<T> {
    get value(): T;
    subscribe(onUpdate: OnUpdate): Unsubscribe;
}

SignalBaseClass

A base class is provided as a starting point for implementation.

export abstract class SignalBaseClass<T> implements Signal<T> {
    abstract get value(): T;

    private subscribers: Set<OnUpdate> = new Set();

    subscribe(onUpdate: OnUpdate) {
        this.subscribers.add(onUpdate);
        return () => {
            this.subscribers.delete(onUpdate);
        };
    }

    protected notify() {
        for (const subscriber of this.subscribers) {
            subscriber();
        }
    }
}
7.0.0-alpha.0

17 days ago

6.6.3

24 days ago

6.6.2

30 days ago

6.6.1

1 month ago

6.6.0

1 month ago

6.5.3

1 month ago

6.5.2

1 month ago

6.5.1

2 months ago

6.5.0

2 months ago

6.4.1

2 months ago

6.4.0

2 months ago

6.3.4

2 months ago

6.3.3

3 months ago

6.3.2

3 months ago

6.3.1

3 months ago

6.3.0

3 months ago

6.2.1

3 months ago

6.2.0

3 months ago

0.0.0

4 months ago