SnapshotController
Reactive controller for subscribing to a State container in HTML custom elements
Import
import { SnapshotController } from "@videojs/store/html";SnapshotController subscribes to a State container and triggers host updates when state changes. It has two overloads:
Full state – returns the entire state object. Re-renders on any state change.
class Display extends HTMLElement {
#state = new SnapshotController(this, sliderState);
render() {
const value = this.#state.value;
// Full state object
}
}With selector – returns a derived value from state. Re-renders only when the selected value changes (using shallow equality).
class SliderValue extends HTMLElement {
#value = new SnapshotController(this, sliderState, (s) => s.value);
render() {
return this.#value.value; // Only the selected slice
}
}Use .track(state) to switch to a different State container at runtime.
SnapshotController vs StoreController
Both are reactive controllers, but they operate at different levels:
SnapshotController |
StoreController |
|
|---|---|---|
| Input | State container |
Store instance or context |
| Subscribes | Always | Only with a selector |
| Use case | Subscribe to raw state changes | Access store actions and optionally subscribe |
SnapshotController is lower-level. It works with State containers directly – the reactive primitives that back a store. Use it when building custom controllers or working outside the player store system.
StoreController is
higher-level. It resolves a store from a context or direct reference and
internally creates a SnapshotController when you pass a selector. Use it for
player UI elements.
Lifecycle
SnapshotController subscribes on hostConnected() and unsubscribes on hostDisconnected(). The React equivalent is useSnapshot.
API Reference
Overload 1
Parameters
| Parameter | Type | Default | Details |
|---|---|---|---|
host* | object | — | |
| |||
state* | function | — | |
| |||
Return Value
| Property | Type | Details |
|---|---|---|
value | R | |
track | ((state: { current: Readonly<T>; subscribe(callback: StateChange, options?: SubscribeOptions): (() => void) }) => void) | |
| ||
hostConnected | (() => void) | |
hostDisconnected | (() => void) | |
Overload 2
Parameters
| Parameter | Type | Default | Details |
|---|---|---|---|
host* | object | — | |
| |||
state* | function | — | |
| |||
selector* | object | — | |
| |||
Return Value
| Property | Type | Details |
|---|---|---|
value | R | |
track | ((state: { current: Readonly<T>; subscribe(callback: StateChange, options?: SubscribeOptions): (() => void) }) => void) | |
| ||
hostConnected | (() => void) | |
hostDisconnected | (() => void) | |