[useFormState] Allow sync actions (#27571)

Updates useFormState to allow a sync function to be passed as an action.

A form action is almost always async, because it needs to talk to the
server. But since we support client-side actions, too, there's no reason
we can't allow sync actions, too.

I originally chose not to allow them to keep the implementation simpler
but it's not really that much more complicated because we already
support this for actions passed to startTransition. So now it's
consistent: anywhere an action is accepted, a sync client function is a
valid input.
This commit is contained in:
Andrew Clark
2023-10-31 23:32:31 -04:00
committed by GitHub
parent 08a39539fc
commit 77c4ac2ce8
31 changed files with 668 additions and 472 deletions

View File

@@ -33,20 +33,20 @@ export default class ProfilingCache {
this._profilerStore = profilerStore;
}
getCommitTree: ({
commitIndex: number,
rootID: number,
}) => CommitTree = ({commitIndex, rootID}) =>
getCommitTree: ({commitIndex: number, rootID: number}) => CommitTree = ({
commitIndex,
rootID,
}) =>
getCommitTree({
commitIndex,
profilerStore: this._profilerStore,
rootID,
});
getFiberCommits: ({
fiberID: number,
rootID: number,
}) => Array<number> = ({fiberID, rootID}) => {
getFiberCommits: ({fiberID: number, rootID: number}) => Array<number> = ({
fiberID,
rootID,
}) => {
const cachedFiberCommits = this._fiberCommits.get(fiberID);
if (cachedFiberCommits != null) {
return cachedFiberCommits;