Skip to content

Commit df9a657

Browse files
author
Sebastian Silbermann
committed
Show use(Promise) behavior in DevTools fixture
1 parent ff29e08 commit df9a657

File tree

2 files changed

+61
-0
lines changed

2 files changed

+61
-0
lines changed

.eslintrc.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,13 @@ module.exports = {
450450
__IS_EDGE__: 'readonly',
451451
},
452452
},
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+
},
453460
],
454461

455462
env: {

packages/react-devtools-shell/src/app/InspectableElements/CustomHooks.js

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ import {
1313
forwardRef,
1414
Fragment,
1515
memo,
16+
Suspense,
1617
useCallback,
1718
useContext,
1819
useDebugValue,
1920
useEffect,
2021
useOptimistic,
2122
useState,
2223
use,
24+
useReducer,
2325
} from 'react';
2426
import {useFormState} from 'react-dom';
2527

@@ -132,6 +134,55 @@ function Forms() {
132134
);
133135
}
134136

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+
135186
export default function CustomHooks(): React.Node {
136187
return (
137188
<Fragment>
@@ -140,6 +191,9 @@ export default function CustomHooks(): React.Node {
140191
<ForwardRefWithHooks />
141192
<HocWithHooks />
142193
<Forms />
194+
<Suspense fallback="loading">
195+
<FunctionWithUse />
196+
</Suspense>
143197
</Fragment>
144198
);
145199
}

0 commit comments

Comments
 (0)