@@ -7,33 +7,32 @@ A minimal store for Fresh, to allow communication between islands. It attach sto
77Creating a store.
88
99``` typescript
10- const ptr = useStore (
11- " Initial Value" ,
12- (newState ) => console .log (` New value: ${newState } ` ),
13- );
10+ const ptr = useStore (" Initial Value" , { onChange : (state ) => console .log (state ) });
1411
15- console .log (window . stores . get <string >(ptr ).state );
16- window . stores . get <string >(ptr ).set (" Modified Value" );
12+ console .log (Stores . get <string >(ptr )? .state );
13+ Stores . get <string >(ptr )? .set (" Modified Value" );
1714```
1815
1916```
2017Output:
2118Initial Value
22- New value: Modified Value
19+ Modified Value
2320```
2421
2522Creating a store and providing a pointer.
2623
2724``` typescript
28- const ptr = crypto .randomUUID ();
25+ const pointer = crypto .randomUUID ();
2926useStore (
30- " Initial Value" ,
31- (newState ) => console .log (` New value: ${newState } ` ),
32- ptr ,
27+ " Initial Value" ,
28+ {
29+ pointer: pointer ,
30+ onChange : (newState ) => console .log (` New value: ${newState } ` )
31+ },
3332);
3433
35- console .log (window . stores . get <string >(ptr ).state );
36- window . stores . get <string >(ptr ).set (" Modified Value" );
34+ console .log (Stores . get <string >(ptr )? .state );
35+ Stores . get <string >(ptr )? .set (" Modified Value" );
3736```
3837
3938```
@@ -45,15 +44,15 @@ New value: Modified Value
4544## Creating a new Observer
4645
4746``` typescript
48- const storePtr = useStore (" New Store" , ( _ ) => null );
47+ const storePtr = useStore (" New Store" );
4948
5049class ConcreteObserver implements Observer <T > {
5150 public update(subject : Store <T >): void {
5251 console .log (" The store was updated, new state: " , subject .state );
5352 }
5453}
5554
56- window . stores . get (storePtr ).attach (new ConcreteObserver ());
55+ Stores . get (storePtr )? .attach (new ConcreteObserver ());
5756```
5857
5958## Example usage in components
@@ -63,23 +62,24 @@ window.stores.get(storePtr).attach(new ConcreteObserver());
6362
6463/** @jsx h */
6564import { h } from " preact" ;
65+ import { Stores , useStore } from " @stores" ;
6666
6767interface CompAProps {
6868 storePtr: string ;
6969}
7070
7171export default function ComponentA(props : CompAProps ) {
72- useStore < number > (0 , () => null , props .storePtr );
72+ useStore (0 , { pointer: props .storePtr } );
7373
7474 const increment = () =>
75- window . stores
75+ Stores
7676 .get <number >(props .storePtr )
77- .set ((state ) => state + 1 );
77+ ? .set ((state ) => state + 1 );
7878
7979 const decrement = () =>
80- window . stores
80+ Stores
8181 .get <number >(props .storePtr )
82- .set ((state ) => state - 1 );
82+ ? .set ((state ) => state - 1 );
8383
8484 return (
8585 <div >
@@ -95,40 +95,20 @@ export default function ComponentA(props: CompAProps) {
9595
9696/** @jsx h */
9797import { h } from " preact" ;
98- import { useEffect , useState } from " preact/hooks" ;
98+ import { useState } from " preact/hooks" ;
9999
100- // Change depending on your import_map
101- import type { Observer , Store } from " @store" ;
102- import { StoreStack } from " @store" ;
100+ import { useStore } from " @store" ;
103101
104102interface CompBProps {
105103 storePtr: string ;
106104}
107105
108106export default function ComponentB(props : CompBProps ) {
109107 const [counter, setCounter] = useState (0 );
110-
111- useEffect (() => {
112- class CounterObserver implements Observer <number > {
113- public update(subject : Store <number >) {
114- setCounter (subject .state );
115- }
116- }
117-
118- const observer = new CounterObserver ();
119-
120- // Makes sure `window.stores` is defined.
121- StoreStack .configure ();
122-
123- // Creates the store if it does not yet exist.
124- window .stores .upsert <number >(counter , props .storePtr , observer );
125-
126- // Sets the counter value to the value in the store.
127- setCounter (window .stores .get <number >(props .storePtr )! .state );
128-
129- // Detaches the observer on cleanup.
130- return () => window .stores .get (props .storePtr ).detach (observer );
131- }, [counter ]);
108+ useStore (counter , {
109+ pointer: props .storePtr ,
110+ onChange : (newState ) => setCounter (newState ),
111+ });
132112
133113 return <p >Counter: { counter } </p >;
134114}
0 commit comments