@@ -330,6 +330,8 @@ type StoreHookForAtoms = {
330330
331331/** StoreHooks are an experimental API. */
332332type StoreHooks = {
333+ /** Listener to notify when the atom is initialized. */
334+ readonly i ?: StoreHookForAtoms
333335 /** Listener to notify when the atom is read. */
334336 readonly r ?: StoreHookForAtoms
335337 /** Listener to notify when the atom value is changed. */
@@ -380,6 +382,7 @@ const createStoreHookForAtoms = (): StoreHookForAtoms => {
380382
381383function initializeStoreHooks ( storeHooks : StoreHooks ) : Required < StoreHooks > {
382384 type SH = { - readonly [ P in keyof StoreHooks ] : StoreHooks [ P ] }
385+ ; ( storeHooks as SH ) . i ||= createStoreHookForAtoms ( )
383386 ; ( storeHooks as SH ) . r ||= createStoreHookForAtoms ( )
384387 ; ( storeHooks as SH ) . c ||= createStoreHookForAtoms ( )
385388 ; ( storeHooks as SH ) . m ||= createStoreHookForAtoms ( )
@@ -401,6 +404,7 @@ const atomOnMount: AtomOnMount = (_store, atom, setAtom) =>
401404const ensureAtomState : EnsureAtomState = ( store , atom ) => {
402405 const buildingBlocks = getInternalBuildingBlocks ( store )
403406 const atomStateMap = buildingBlocks [ 0 ]
407+ const storeHooks = buildingBlocks [ 6 ]
404408 const atomOnInit = buildingBlocks [ 9 ]
405409 if ( import . meta. env ?. MODE !== 'production' && ! atom ) {
406410 throw new Error ( 'Atom is undefined or null' )
@@ -409,6 +413,7 @@ const ensureAtomState: EnsureAtomState = (store, atom) => {
409413 if ( ! atomState ) {
410414 atomState = { d : new Map ( ) , p : new Set ( ) , n : 0 }
411415 atomStateMap . set ( atom , atomState )
416+ storeHooks . i ?.( atom )
412417 atomOnInit ?.( store , atom )
413418 }
414419 return atomState as never
0 commit comments