@@ -2,27 +2,19 @@ import { useSyncExternalStore, useCallback } from 'react';
22import { Store } from '../types' ;
33import { unstable_batchedUpdates } from 'react-dom' ;
44
5- function useBeacon < T , U > (
5+ function useValue < T , U > (
66 store : Store < T > ,
77 selector : ( state : T ) => U ,
88) : [ U , ( updater : ( previousState : U ) => U ) => void ] {
9- const getSnapshot = useCallback (
10- ( ) => selector ( store . get ( ) ) ,
11- [ store , selector ] ,
12- ) ;
13- const state : U = useSyncExternalStore (
14- store . subscribe ,
15- getSnapshot ,
16- getSnapshot ,
17- ) ;
9+ const getSnapshot = useCallback ( ( ) => selector ( store . get ( ) ) , [ store , selector ] ) ;
10+ const state : U = useSyncExternalStore ( store . subscribe , getSnapshot , getSnapshot ) ;
1811
1912 const setState = useCallback (
2013 ( updater : ( prevState : U ) => U ) => {
2114 unstable_batchedUpdates ( ( ) => {
2215 store . set ( ( prevState ) => {
2316 const selectedState = selector ( prevState ) ;
24- const newState =
25- typeof updater === 'function' ? updater ( selectedState ) : updater ;
17+ const newState = typeof updater === 'function' ? updater ( selectedState ) : updater ;
2618 return {
2719 ...prevState ,
2820 ...mapSelectedStateToGlobalState ( selector , newState , prevState ) ,
@@ -48,23 +40,19 @@ function mapSelectedStateToGlobalState<T, U>(
4840 return { [ key ] : newState } as Partial < T > ;
4941 }
5042 }
51- throw new Error (
52- 'Could not map primitive selected state back to global state.' ,
53- ) ;
43+ throw new Error ( 'Could not map primitive selected state back to global state.' ) ;
5444 }
5545
5646 const selectedKeys = Object . keys ( selector ( prevState ) as Object ) ;
5747 const updates : Partial < T > = { } ;
5848
5949 selectedKeys . forEach ( ( key ) => {
6050 if ( key in ( newState as Object ) ) {
61- updates [ key as keyof T ] = newState [
62- key as keyof U
63- ] as unknown as T [ keyof T ] ;
51+ updates [ key as keyof T ] = newState [ key as keyof U ] as unknown as T [ keyof T ] ;
6452 }
6553 } ) ;
6654
6755 return updates ;
6856}
6957
70- export default useBeacon ;
58+ export default useValue ;
0 commit comments