Skip to contents

Usage

useFetcher(
  into = NULL,
  as = "children",
  selector = "state",
  render = NULL,
  fetcherKey = NULL,
  ...
)

Arguments

into

A component (HTML tag or shiny.react-based element) that will receive the hook data as the specified prop.

as

Character. The name of the component's prop to inject the hook data into (by default "children" for text display, "rows" for a data grid, "value" for an input).

selector

Character. Optional key to extract from the hook data object. If NULL (the default), the entire data is passed. Dotted paths like "summary.title" navigate nested objects.

render

Optional JS function (value) => ReactNode used in place of into/as. Mirrors the native React Router pattern for cases where a single prop is not expressive enough (e.g. JS("v => `${v.first} ${v.last}`")).

fetcherKey

Character. Optional key to share a fetcher across components (e.g. "my-fetcher").

...

Additional props to pass to the component.

Details

Calls the useFetcher() hook and injects the result (or a selector from it) as a prop of the into component. Use to fetch data or submit forms without causing a navigation. The fetcher object has state ("idle"/"loading"/"submitting") and data (the response from a loader or action).

selector defaults to "state" so the default into/ children display shows a readable string ("idle" / "loading" / "submitting"). The full fetcher object contains methods (submit, load, Form) that would be silently dropped by JSON serialization if the whole object were rendered as children. To call those methods, use the render = JS(...) form, which receives the full fetcher: render = JS("f => <button onClick={() => f.load('/data')}>Reload</button>").