SolidJS Adapter

The @banksia/signals/solid subpath bridges @banksia/signals domain models into SolidJS's fine-grained reactivity system.


Installation

pnpm add @banksia/signals solid-js

createSolidSignalBridge(target)

Wraps a reactive object or domain store inside a SolidJS signal accessor. When any tracked property on the target changes, the bridge triggers SolidJS signal notifications, updating dependent JSX nodes surgically without Virtual DOM reconciliation:

import { Component } from "solid-js";
import { createSolidSignalBridge } from "@banksia/signals/solid";
import { cartStore } from "./stores/cart-store";

export const CartView: Component = () => {
  // Wrap the domain store in a Solid accessor:
  const cart = createSolidSignalBridge(cartStore);

  return (
    <div class="cart-container">
      <h2>Shopping Cart ({cart().items.length} items)</h2>
      <p>Total: ${cart().total.toFixed(2)}</p>
      <button
        onClick={() =>
          cart().addItem({
            id: "sku-2",
            name: "Mouse",
            price: 29.99,
            quantity: 1,
          })
        }
      >
        Add Item
      </button>
    </div>
  );
};

Automatic Cleanup

The bridge automatically registers a teardown handler with Solid's onCleanup():

  • When the enclosing component unmounts or its reactive root is disposed, the underlying @banksia/signals effect is disconnected automatically.
  • Prevents dangling subscriptions and memory leaks across route transitions.

TypeScript Signatures

export function createSolidSignalBridge<T extends object>(target: T): () => T;