Skip to content

Instantly share code, notes, and snippets.

@euxn23
Last active February 15, 2024 23:00
Show Gist options
  • Select an option

  • Save euxn23/3a0752436f357d99eb133b5a4126173b to your computer and use it in GitHub Desktop.

Select an option

Save euxn23/3a0752436f357d99eb133b5a4126173b to your computer and use it in GitHub Desktop.
use-behavior-subject.ts
import { BehaviorSubject } from 'rxjs'
import { useSyncExternalStore } from 'react'
export function useSyncBehaviorSubject<T>(subject: BehaviorSubject<T>): T {
return useSyncExternalStore(
(onStoreChange) => {
const subscription = subject.subscribe(onStoreChange)
return () => subscription.unsubscribe()
},
() => subject.value
)
}
export function setBehaviorSubjectValue<T>(subject: BehaviorSubject<T>): (value: T) => void {
return (value: T) => subject.next(value)
}
// for NOT ONLY React
export const model = new BehaviorSubject<Model>({})
export const setModel = setBehaviorSubjectValue(model)
// for ONLY React
export const useModel = () => useSyncBehaviorSubject(model)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment