@@ -37,7 +37,7 @@ $ yarn add hitchcock
37
37
38
38
### Director
39
39
40
- Import the ` Director ` component, and add it somewhere in your app:
40
+ Import the ` Director ` component and add it somewhere in your app:
41
41
42
42
``` jsx
43
43
import { Director } from " hitchcock" ;
@@ -53,7 +53,7 @@ function YourApp() {
53
53
54
54
### Lazy
55
55
56
- Instead of using ' React.lazy' import ' lazy' from hitchcock:
56
+ Instead of using ` React.lazy ` import ` lazy ` from hitchcock:
57
57
58
58
``` jsx
59
59
import { lazy } from " hitchcock" ;
@@ -70,14 +70,22 @@ const ArtistPage = lazy(() => import("./components/ArtistPage"), "ArtistPage");
70
70
``` jsx
71
71
import { createResource } from " hitchcock" ;
72
72
73
- const ComicResource = createResource (
74
- id => fetch (` https://xkcd.com/${ id} /info.0.json` ).then (r => r .json ()),
75
- id => ` comic-${ id} `
73
+ const BeerResource = createResource (
74
+ id =>
75
+ fetch (` https://api.punkapi.com/v2/beers/${ id} ` )
76
+ .then (r => r .json ())
77
+ .then (d => d[0 ]),
78
+ id => ` beer-${ id} `
76
79
);
77
80
78
- function Comic ({ comicId }) {
79
- const comic = ComicResource .read (comicId);
80
- return < h1> {comic .title }< / h1> ;
81
+ function Beer ({ beerId }) {
82
+ const beer = BeerResource .read (beerId);
83
+ return (
84
+ <>
85
+ < h1> {beer .name }< / h1>
86
+ < p> {beer .description }< / p>
87
+ < / >
88
+ );
81
89
}
82
90
```
83
91
@@ -91,38 +99,51 @@ It returns a `resource` with a `read` method that will suspend a component until
91
99
92
100
``` jsx
93
101
import React , { Suspense } from " react" ;
94
- import { createResource } from " hitchcock" ;
95
-
96
- const ComicResource = createResource (
97
- id => fetch (` https://xkcd.com/${ id} /info.0.json` ).then (r => r .json ()),
98
- id => ` comic-${ id} `
102
+ import ReactDOM from " react-dom" ;
103
+ import { createResource , Director } from " hitchcock" ;
104
+
105
+ const BeerResource = createResource (
106
+ id =>
107
+ fetch (` https://api.punkapi.com/v2/beers/${ id} ` )
108
+ .then (r => r .json ())
109
+ .then (d => d[0 ]),
110
+ id => ` beer-${ id} `
99
111
);
100
112
101
113
function App () {
102
- const [comicId , setComicId ] = React .useState (null );
103
- const deferredComicId = React .useDeferredValue (comicId, { timeoutMs: 2000 });
104
- const showComic = deferredComicId !== null && comicId === deferredComicId;
114
+ const [beerId , setBeerId ] = React .useState (0 );
115
+ const deferredBeerId = React .useDeferredValue (beerId, { timeoutMs: 1000 });
116
+
117
+ const showBeer = deferredBeerId > 0 ;
105
118
106
119
const handleChange = e => {
107
- const newComicId = + e .target .value ;
108
- ComicResource .preload (newComicId );
109
- setComicId (newComicId );
120
+ const newBeerId = + e .target .value ;
121
+ BeerResource .preload (newBeerId );
122
+ setBeerId (newBeerId );
110
123
};
111
124
112
125
return (
113
- < div >
114
- Comic : < input type= " number" value= {comicId } onChange= {handleChange} / >
115
- < Suspense falback = { ` Loading comic ${ comicId } ...` }>
116
- {showComic && < Comic comicId = {deferredComicId } / > }
126
+ < Director >
127
+ Beer # < input type= " number" value= {beerId } onChange= {handleChange} / >
128
+ < Suspense fallback = { < div > { ` Loading beer # ${ beerId } ...` } < / div > }>
129
+ {showBeer && < Beer beerId = {deferredBeerId } / > }
117
130
< / Suspense>
118
- < / div >
131
+ < / Director >
119
132
);
120
133
}
121
134
122
- function Comic ({ comicId }) {
123
- const comic = ComicResource .read (comicId);
124
- return < h1> {comic .title }< / h1> ;
135
+ function Beer ({ beerId }) {
136
+ const beer = BeerResource .read (beerId);
137
+ return (
138
+ <>
139
+ < h1> {beer .name }< / h1>
140
+ < p> {beer .description }< / p>
141
+ < / >
142
+ );
125
143
}
144
+
145
+ const container = document .getElementById (" root" );
146
+ ReactDOM .createRoot (container).render (< App / > );
126
147
```
127
148
128
149
## Contributing
0 commit comments