You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[DevTools] Mark Unknown Reasons for Suspending with a Note (facebook#34200)
We currently only track the reason something might suspend in
development mode through debug info but this excludes some cases. As a
result we can end up with boundary that suspends but has no cause. This
tries to detect that and show a notice for why that might be. I'm also
trying to make it work with old React versions to cover everything.
In production we don't track any of this meta data like `_debugInfo`,
`_debugThenable` etc. so after resolution there's no information to take
from. Except suspensey images / css which we can track in prod too. We
could track lazy component types already. We'd have to add something
that tracks after the fact if something used a lazy child, child as a
promise, hooks, etc. which doesn't exist today. So that's not backwards
compatible and might add some perf/memory cost. However, another
strategy is also to try to replay the components after the fact which
could be backwards compatible. That's tricky for child position since
there's so many rules for how to do that which would have to be
replicated.
If you're in development you get a different error. Given that we've
added instrumentation very recently. If you're on an older development
version of React, then you get a different error. Unfortunately I think
my feature test is not quite perfect because it's tricky to test for the
instrumentation I just added.
facebook#34146 So I think for some
prereleases that has `_debugOwner` but doesn't have that you'll get a
misleading error.
Finally, if you're in a modern development environment, the only reason
we should have any gaps is because of throw-a-Promise. This will
highlight it as missing. We can detect that something threw if a
Suspense boundary commits with a RetryCache but since it's a WeakSet we
can't look into it to see anything about what it might have been. I
don't plan on doing anything to improve this since it would only apply
to new versions of React anyway and it's just inherently flawed. So just
deprecate it facebook#34032.
Note that nothing in here can detect that we suspended Transition. So
throwing at the root or in an update won't show that anywhere.
exportconstUNKNOWN_SUSPENDERS_NONE: UnknownSuspendersReason=0;// If we had at least one debugInfo, then that might have been the reason.
36
+
exportconstUNKNOWN_SUSPENDERS_REASON_PRODUCTION: UnknownSuspendersReason=1;// We're running in prod. That might be why we had unknown suspenders.
37
+
exportconstUNKNOWN_SUSPENDERS_REASON_OLD_VERSION: UnknownSuspendersReason=2;// We're running an old version of React that doesn't have full coverage. That might be the reason.
38
+
exportconstUNKNOWN_SUSPENDERS_REASON_THROWN_PROMISE: UnknownSuspendersReason=3;// If we're in dev, didn't detect and debug info and still suspended (other than CSS/image) the only reason is thrown promise.
0 commit comments