-
Notifications
You must be signed in to change notification settings - Fork 49.7k
Closed
Labels
Status: UnconfirmedA potential issue that we haven't yet confirmed as a bugA potential issue that we haven't yet confirmed as a bug
Description
A couple examples of unexpected and seemingly broken useTransition behaviour
1. useTransition doesn't work, if the component is suspended before useTransition call:
Sandbox: https://codesandbox.io/s/gracious-lumiere-242bo?file=/src/First.js
Code:
export default function First() {
cache.read(); // <-- read from cache first
const [startTransition, isPending] = React.unstable_useTransition(config); // <-- call useTransition after
const [rev, setRev] = React.useState(0);
function reload() {
cache.expire();
startTransition(() => {
setRev(rev => rev + 1);
});
}
return (
<div>
{isPending ? "Pending" : "Not pending"}
<br />
{rev}
<br />
<button onClick={reload}>Reload</button>
</div>
);
}The current behavior
Fallback is always shown
The expected behavior
Fallback is never shown
This issue is somewhat fixed if cache read and useTransition are just swapped, but then we get issue number 2:
2. useTransition prevents fallback, but isPending is either always false, or true for small period of time:
Sandbox: https://codesandbox.io/s/gracious-lumiere-242bo?file=/src/Second.js
Code:
export default function Second() {
const [startTransition, isPending] = React.unstable_useTransition(config); // <-- call useTransition first
cache.read(); // <-- read from cache after
const [rev, setRev] = React.useState(0);
function reload() {
cache.expire();
startTransition(() => {
setRev(rev => rev + 1);
});
}
return (
<div>
{isPending ? "Pending" : "Not pending"}
<br />
{rev}
<br />
<button onClick={reload}>Reload</button>
</div>
);
}This works much better, but still has some issues
The current behavior
- fallback is still sometimes shown, mostly when you click the button more than once quickly
isPendingis either always false, or true for small period of time (you can see the flash)
The expected behavior
- fallback is never shown
isPendingis true while suspended
This is probably the same issue as #19046
React version: "0.0.0-experimental-4c8c98ab
Metadata
Metadata
Assignees
Labels
Status: UnconfirmedA potential issue that we haven't yet confirmed as a bugA potential issue that we haven't yet confirmed as a bug