File tree Expand file tree Collapse file tree 2 files changed +61
-0
lines changed
packages/react-devtools-shell/src/app/InspectableElements Expand file tree Collapse file tree 2 files changed +61
-0
lines changed Original file line number Diff line number Diff line change @@ -450,6 +450,13 @@ module.exports = {
450
450
__IS_EDGE__ : 'readonly' ,
451
451
} ,
452
452
} ,
453
+ {
454
+ files : [ 'packages/react-devtools-shell/**/*.js' ] ,
455
+ rules : {
456
+ // DevTools shell is an internal app not published to NPM
457
+ 'react-internal/prod-error-codes' : 'off' ,
458
+ } ,
459
+ } ,
453
460
] ,
454
461
455
462
env : {
Original file line number Diff line number Diff line change @@ -13,13 +13,15 @@ import {
13
13
forwardRef ,
14
14
Fragment ,
15
15
memo ,
16
+ Suspense ,
16
17
useCallback ,
17
18
useContext ,
18
19
useDebugValue ,
19
20
useEffect ,
20
21
useOptimistic ,
21
22
useState ,
22
23
use ,
24
+ useReducer ,
23
25
} from 'react' ;
24
26
import { useFormState } from 'react-dom' ;
25
27
@@ -132,6 +134,55 @@ function Forms() {
132
134
) ;
133
135
}
134
136
137
+ let promise = Promise . resolve ( 'initial' ) ;
138
+ function FunctionWithUse ( ) {
139
+ // $FlowFixMe[underconstrained-implicit-instantiation]
140
+ const [ , rerender ] = useReducer ( ( n : number ) => n + 1 , 0 ) ;
141
+ const value = use ( promise ) ;
142
+
143
+ return (
144
+ < Fragment >
145
+ { value }
146
+ < form
147
+ onSubmit = { event => {
148
+ event . preventDefault ( ) ;
149
+ const delay = + event . target . elements . delay . value ;
150
+ const shouldReject = event . target . elements . shouldReject . checked ;
151
+ const settledValue = event . target . elements . settledValue . value ;
152
+ promise = new Promise ( ( resolve , reject ) => {
153
+ setTimeout ( ( ) => {
154
+ if ( shouldReject ) {
155
+ reject ( new Error ( settledValue ) ) ;
156
+ } else {
157
+ resolve ( settledValue ) ;
158
+ }
159
+ } , delay ) ;
160
+ } ) ;
161
+ rerender ( ) ;
162
+ } } >
163
+ < label >
164
+ delay
165
+ < input
166
+ name = "delay"
167
+ type = "text"
168
+ inputMode = "numeric"
169
+ defaultValue = { 1000 }
170
+ />
171
+ </ label >
172
+ < label >
173
+ settled value
174
+ < input name = "settledValue" type = "text" />
175
+ </ label >
176
+ < label >
177
+ reject
178
+ < input name = "shouldReject" type = "checkbox" defaultChecked = { false } />
179
+ </ label >
180
+ < button type = "submit" > Suspend</ button >
181
+ </ form >
182
+ </ Fragment >
183
+ ) ;
184
+ }
185
+
135
186
export default function CustomHooks ( ) : React . Node {
136
187
return (
137
188
< Fragment >
@@ -140,6 +191,9 @@ export default function CustomHooks(): React.Node {
140
191
< ForwardRefWithHooks />
141
192
< HocWithHooks />
142
193
< Forms />
194
+ < Suspense fallback = "loading" >
195
+ < FunctionWithUse />
196
+ </ Suspense >
143
197
</ Fragment >
144
198
) ;
145
199
}
You can’t perform that action at this time.
0 commit comments