useSequentFlow
Primary hook for creating and controlling a single flow host.
It returns:
init— starts the flowSequentOutlet— the bound outlet component for that hook instance
Signature
function useSequentFlow<TResult = unknown>(): {
init: (stepLoader: StepLoader, initialContext?: unknown) => void;
status: "idle" | "active";
result: SequentResult<TResult> | null;
SequentOutlet: (props: SequentOutletProps) => ReactElement;
};
Example
import { useSequentFlow, useSequentStep } from "react-sequent";
function Step1() {
const { advance } = useSequentStep();
return <button onClick={() => advance(() => Step2)}>Next</button>;
}
function Step2() {
const { resolve } = useSequentStep<string>();
return <button onClick={() => resolve("done")}>Finish</button>;
}
function App() {
const { init, status, result, SequentOutlet } = useSequentFlow<string>();
const start = () => {
init(() => Step1);
};
React.useEffect(() => {
if (status === "idle" && result?.status === "resolved") {
console.log(result.value);
}
}, [status, result]);
return (
<>
<SequentOutlet />
<button onClick={start}>Start</button>
</>
);
}
Notes
- One
useSequentFlow()call creates one isolated flow host. SequentOutletstays idle untilinit()is called.statusreports whether a flow is currently active.resultstores the latest terminal outcome (resolvedoraborted).children,fallback,errorStep,chrome, andtransitionare configured onSequentOutlet.init()accepts anyStepLoader, including factories that return JSX elements.init()throws ifSequentOutletis not currently mounted.