8.20.0 • Published 5 months ago

@lwc/signals v8.20.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months 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();
        }
    }
}
8.11.0

11 months ago

8.15.1

8 months ago

8.15.0

8 months ago

8.19.1

5 months ago

8.19.0

6 months ago

8.12.0

11 months ago

8.12.2

10 months ago

8.12.1

10 months ago

8.16.0

8 months ago

8.12.4

10 months ago

8.12.3

10 months ago

8.16.2

7 months ago

8.12.6

9 months ago

8.16.1

8 months ago

8.12.5

9 months ago

8.7.0

12 months ago

8.12.6-alpha.0

9 months ago

8.10.0-alpha.0

11 months ago

8.16.4

7 months ago

8.16.3

7 months ago

8.12.7

9 months ago

8.16.5

6 months ago

8.17.0-alpha.1

7 months ago

8.17.0-alpha.0

7 months ago

8.13.1

9 months ago

8.13.0

9 months ago

8.13.3

8 months ago

8.13.2

8 months ago

8.17.0

6 months ago

8.8.0

11 months ago

8.12.7-alpha.0

9 months ago

8.20.0

5 months ago

8.13.1-alpha.0

9 months ago

8.10.0

11 months ago

8.10.2

10 months ago

8.10.1

11 months ago

8.14.0

8 months ago

8.10.3

10 months ago

8.13.0-alpha.0

9 months ago

8.18.0

6 months ago

8.9.0

11 months ago

8.18.2

6 months ago

8.18.1

6 months ago

8.6.0

12 months ago

8.4.0

12 months ago

8.5.0

12 months ago

8.3.0

12 months ago

8.2.0

1 year ago

8.1.2

1 year ago

8.1.1

1 year ago

8.1.3

1 year ago

7.1.5

1 year ago

8.1.0

1 year ago

8.1.0-alpha.5

1 year ago

8.1.0-alpha.4

1 year ago

8.1.0-alpha.1

1 year ago

8.1.0-alpha.0

1 year ago

8.1.0-alpha.3

1 year ago

8.1.0-alpha.2

1 year ago

8.0.0-alpha.0

1 year ago

8.0.0-alpha.1

1 year ago

7.2.6

1 year ago

7.2.5

1 year ago

7.2.4

1 year ago

7.1.4

1 year ago

8.0.0

1 year ago

7.2.3

1 year ago

7.2.3-alpha.0

1 year ago

7.0.0-alpha.1

1 year ago

7.3.0-alpha.3

1 year ago

7.3.0-alpha.2

1 year ago

7.3.0-alpha.1

1 year ago

7.3.0-alpha.0

1 year ago

7.1.3

1 year ago

7.1.2

1 year ago

7.1.1

1 year ago

7.1.0

1 year ago

7.0.5

1 year ago

6.4.3

1 year ago

6.4.2

1 year ago

6.4.5

1 year ago

6.4.4

1 year ago

6.6.5

1 year ago

6.6.4

1 year ago

6.6.7

1 year ago

6.6.6

1 year ago

7.0.1-alpha.0

1 year ago

7.0.3-alpha.0

1 year ago

7.0.0

1 year ago

7.2.2

1 year ago

7.0.4

1 year ago

7.2.1

1 year ago

7.0.3

1 year ago

7.2.0

1 year ago

7.0.2

1 year ago

7.0.1

1 year ago

6.7.0

1 year ago

6.7.2

1 year ago

6.7.1

1 year ago

7.0.0-alpha.0

1 year ago

6.6.3

1 year ago

6.6.2

1 year ago

6.6.1

1 year ago

6.6.0

1 year ago

6.5.3

2 years ago

6.5.2

2 years ago

6.5.1

2 years ago

6.5.0

2 years ago

6.4.1

2 years ago

6.4.0

2 years ago

6.3.4

2 years ago

6.3.3

2 years ago

6.3.2

2 years ago

6.3.1

2 years ago

6.3.0

2 years ago

6.2.1

2 years ago

6.2.0

2 years ago

0.0.0

2 years ago