funnel.Render
Component
The funnel.Render
component is responsible for rendering each step of the funnel.
It is included in the UseFunnelResults returned by useFunnel()
.
interface FunnelRenderComponent<T> extends React.ComponentType<FunnelRenderProps<T>> {
with: FunnelRenderWithEvent<T>;
overlay: FunnelRenderOverlay<T>;
};
FunnelRenderProps
Specifies the rendering logic for each step.
interface FunnelRenderProps<T> {
[key in keyof T]: (props: {
context: T[key];
history: FunnelHistory<T, key>;
}) => React.ReactNode;
}
context
(object
): An object representing the state of the current step.history
(object
): An object managing the transitions of the funnel. Use it to move to the next step or return to the previous step. For more information, seeFunnelHistory
.
Example
In the following example demonstrates how to define the rendering logic for each step (EmailInput
, PasswordInput
, OtherInput
) and pass the necessary data for each step. You can access the data for each step using context
and move to the next step using history
.
import { useFunnel } from "@use-funnel/next";
const funnel = useFunnel(/* ... */);
return (
<funnel.Render
EmailInput={({ history }) => (
<EmailInput onNext={(email) => history.push('PasswordInput', { email })} />
)}
PasswordInput={({ context, history }) => (
<PasswordInput
email={context.email}
onNext={(password) => history.push('OtherInput', { password })}
/>
)}
OtherInput={() => <OtherInput />}
/>
);
FunnelRenderWithEvent
Enables the definition of an event object for multiple transitions within the current step.
interface FunnelRenderWithEvent<T> {
events: {
[eventName: string]: (payload: any, funnel: { context: T; history: FunnelHistory<T> }) => void;
};
render: (props: {
context: T;
dispatch: (eventName: string, payload: any) => void;
}) => React.ReactNode;
}
events
(object
): An object containing event handlers for each event name.eventName
(string
): The name of the event.payload
(any
): The data passed to the event handler.funnel
(object
): An object containing the current step state and the funnel history. Use it to access the current state and manage transitions.context
(object
): An object representing the state of the current step.history
(object
): An object managing the transitions of the funnel. Use it to move to the next step or return to the previous step. For more information, seeFunnelHistory
.
render
(function
): A function that returns a React node.context
(object
): An object representing the state of the current step.dispatch
(function
): A function that dispatches an event.eventName
(string
): The name of the event.payload
(any
): The data passed to the event handler.
Example
<funnel.Render
EmailInput={funnel.Render.with({
events: {
EmailInputSuccess: (email: string, { history }) => history.push('PasswordInput', { email }),
EmailInputFail: (error: Error, { history }) => history.push('ErrorStep', { error: error.message })
},
render({ context, dispatch }) {
return (
<EmailInput
email={context.email}
onNext={(email) => dispatch('EmailInputSuccess', email)}
onError={(error) => dispatch('EmailInputFail', error)}
/>
);
}
})}
/>
For more detailed instructions, see the Define transition event (opens in a new tab).
FunnelRenderOverlay
This option allows you to display the previous step on the same screen when displaying the current step, you can use this option.
type FunnelRenderOverlay<T> =
| FunnelRenderOverlayWithoutEvent<T>
| FunnelRenderOverlayWithEvent<T>;
interface FunnelRenderOverlayWithoutEvent<T> {
render: (props: {
context: T;
history: FunnelHistory<T>;
close: () => void;
}) => React.ReactNode;
}
interface FunnelRenderOverlayWithEvent<T> {
events: {
[eventName: string]: (payload: any, funnel: { context: T; history: FunnelHistory<T> }) => void;
};
render: (props: {
context: T;
dispatch: (eventName: string, payload: any) => void;
close: () => void;
}) => React.ReactNode;
}
FunnelRenderOverlayWithoutEvent
render
(function
): A function that returns a React node.context
(object
): An object representing the state of the current step.history
(object
): An object managing the transitions of the funnel. Use it to move to the next step or return to the previous step. For more information, seeFunnelHistory
.close
(function
): A function that closes the overlay.
FunnelRenderOverlayWithEvent
events
(object
): An object containing event handlers for each event name.eventName
(string
): The name of the event.payload
(any
): The data passed to the event handler.funnel
(object
): An object containing the current step state and the funnel history. Use it to access the current state and manage transitions.context
(object
): An object representing the state of the current step.history
(object
): An object managing the transitions of the funnel. Use it to move to the next step or return to the previous step. For more information, seeFunnelHistory
.
render
(function
): A function that returns a React node.context
(object
): An object representing the state of the current step.dispatch
(function
): A function that dispatches an event.eventName
(string
): The name of the event.payload
(any
): The data passed to the event handler.
close
(function
): A function that closes the overlay.
Example
<funnel.Render
TermsAgree={funnel.Render.overlay({
render({ context, history, close }) {
return (
<TermsAgree
email={context.email}
onNext={(email) => history.push('PasswordInput', { email })}
onClose={() => close()}
/>
);
}
})}
/>
For more detailed instructions, see the Use overlay (opens in a new tab).