1.0.7 • Published 3 years ago
selkt v1.0.7
Selkt
Small selectable state
Vanilla
Mutable state
import { MutableSelectable } from '@selkt/core'
let initialState = {
user: 'anonymous',
time: Date.now()
}
let store = new MutableSelectable(initialState)
setInterval(() => {
store.set(state => {
let now = Date.now()
state.time = now
state.user = 'anonymous'
})
}, 100)
// Will log time whenever it is divisible by 1000
let unsub = store.select(
state => state.time % 1000 ? state.user : state.time
userOrTime => console.log(userOrTime),
// equalityFunction
)
// initialState === store.state
Immutable state
npm i immer
import { Selectable } from '@selkt/core'
let initialState = {
user: 'anonymous',
time: Date.now()
}
let store = new MutableSelectable(initialState)
setInterval(() => {
store.set(state: Draft<State> => {
let now = Date.now()
state.time = now
state.user = 'anonymous'
})
}, 100)
// Will log time whenever it is divisible by 1000
let unsub = store.select(
state => state.time % 1000 ? state.user : state.time
userOrTime => console.log(userOrTime),
// equalityFunction
)
// initialState !== store.state
React
import { MutableSelect } from '@selkt/core'
import { useSelectable } from '@selkt/react'
let store = new MutableSelectable(0)
export default function App() {
let num = useSelectable(store, (v) => v * 2)
return <div onClick={(e) => store.set((state) => state + 1)}>{num}</div>
}