Skip to content

Commit a7e7b06

Browse files
committed
updated README
1 parent 861d667 commit a7e7b06

1 file changed

Lines changed: 26 additions & 46 deletions

File tree

README.md

Lines changed: 26 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,32 @@ A minimal store for Fresh, to allow communication between islands. It attach sto
77
Creating 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
```
2017
Output:
2118
Initial Value
22-
New value: Modified Value
19+
Modified Value
2320
```
2421

2522
Creating a store and providing a pointer.
2623

2724
```typescript
28-
const ptr = crypto.randomUUID();
25+
const pointer = crypto.randomUUID();
2926
useStore(
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

5049
class 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 */
6564
import { h } from "preact";
65+
import { Stores, useStore } from "@stores";
6666

6767
interface CompAProps {
6868
storePtr: string;
6969
}
7070

7171
export 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 */
9797
import { 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

104102
interface CompBProps {
105103
storePtr: string;
106104
}
107105

108106
export 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

Comments
 (0)