Solid
Hooks
Subscribe to a reactive value.
useSubscription()
Subscribe to a reactive value. Pass a handle or a getter (reactive:
re-subscribes when it reads a signal). Returns an Accessor<R> (value()).
Examples
Inline subscription
import { createWebStorageValue } from 'seitu/web'
import { useSubscription } from 'seitu/solid'
import * as z from 'zod'
function Counter() {
const value = useSubscription(() => createWebStorageValue({
type: 'sessionStorage',
key: 'test',
defaultValue: 0,
schema: z.number(),
}))
return <div>{value()}</div>
}Instance outside of component
import { createWebStorage } from 'seitu/web'
import { useSubscription } from 'seitu/solid'
import * as z from 'zod'
const sessionStorage = createWebStorage({
type: 'sessionStorage',
schemas: { count: z.number(), name: z.string() },
defaultValues: { count: 0, name: '' },
})
function Counter() {
const value = useSubscription(sessionStorage)
return <div>{value().count}</div>
}Subscription with selector
import { createWebStorage } from 'seitu/web'
import { useSubscription } from 'seitu/solid'
import * as z from 'zod'
const sessionStorage = createWebStorage({
type: 'sessionStorage',
schemas: {
count: z.number(),
name: z.string(),
},
defaultValues: { count: 0, name: '' },
})
function Counter() {
// Accessor updates only when count changes
const count = useSubscription(sessionStorage, { selector: value => value.count })
return <div>{count()}</div>
}Reactive source (re-subscribes when a signal changes)
import { createSignal } from 'solid-js'
import { createWebStorageValue } from 'seitu/web'
import { useSubscription } from 'seitu/solid'
import * as z from 'zod'
function User() {
const [userId, setUserId] = createSignal('user-1')
const data = useSubscription(() => createWebStorageValue({
type: 'localStorage',
key: `user:${userId()}`,
schema: z.object({ name: z.string() }),
defaultValue: { name: '' },
}))
return <div>{data().name}</div>
}Ref example
import { createScrollState } from 'seitu/web'
import { useSubscription } from 'seitu/solid'
function Page() {
let ref: HTMLDivElement | undefined
const state = useSubscription(() => createScrollState({ element: () => ref, direction: 'vertical' }))
return (
<div ref={ref}>
{String(state().top.reached)}
</div>
)
}Edit on GitHub
Last updated on