@logux/state
Version:
A tiny (152 bytes) state manager for React/Preact/Vue/Svelte with many atomic tree-shakable stores
33 lines (26 loc) • 667 B
JavaScript
import React from 'react'
import { getValue } from '../get-value/index.js'
export function useStore(store) {
let [, forceRender] = React.useState({})
if (process.env.NODE_ENV !== 'production') {
if (typeof store === 'function') {
throw new Error(
'Use useStore(Builder(id)) or useSync() ' +
'from @logux/client/react for builders'
)
}
}
React.useEffect(() => {
let batching
let unbind = store.listen(() => {
if (batching) return
batching = 1
setTimeout(() => {
batching = undefined
forceRender({})
})
})
return unbind
}, [store])
return getValue(store)
}