[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/pythonnative/pythonnative/v0.43.1/docs/api/hooks.md [Back]  [Original]

# Hooks

Hook primitives for `@component` functions: state, effects, memoization,
context, and refs. Hooks must be called at the top level of a component
(not inside conditionals or loops) so they can be matched to the same
slot across renders.

::: pythonnative.hooks
    options:
      show_root_heading: false
      show_root_toc_entry: false
      members_order: source
      filters: ["!^_"]

## Async hooks

For coroutines and data-driven UI, PythonNative ships dedicated
async-aware hooks layered on top of `use_state` / `use_effect`:

- [`use_effect`][pythonnative.use_effect] accepts `async def`
  callbacks directly; the coroutine runs as a task and is cancelled
  on re-run / unmount.
- [`use_resource`][pythonnative.use_resource]: starts a fetch during
  render and caches it; reading a pending
  [`Resource`][pythonnative.Resource] suspends the render (pair with
  [`Suspense`][pythonnative.Suspense]).
- [`use_transition`][pythonnative.use_transition] /
  [`use_deferred_value`][pythonnative.use_deferred_value]: mark
  expensive updates as low priority so urgent updates render first.
- [`use_query`][pythonnative.use_query]: subscribes to an async
  fetcher and re-renders on data / error / refetch.
- [`use_mutation`][pythonnative.use_mutation]: wraps an async
  mutator with loading / error state and a trigger.
- [`use_persisted_state`][pythonnative.use_persisted_state]:
  `use_state` backed by
  [`AsyncStorage`][pythonnative.AsyncStorage].

See the [Async + data guide](../guides/async.md) for a complete
walkthrough.

## Platform-metric hooks

These hooks subscribe to values published by
`pythonnative.platform_metrics` and re-render the component when they
change. The screen host is the only code that updates the underlying
values; user code consumes them.

- [`use_window_dimensions`][pythonnative.use_window_dimensions]: viewport size.
- [`use_safe_area_insets`][pythonnative.use_safe_area_insets]: top/bottom/left/right insets.
- [`use_keyboard_height`][pythonnative.use_keyboard_height]: software keyboard height.

For most apps the dedicated
[`KeyboardAvoidingView`][pythonnative.KeyboardAvoidingView] component
is preferable to consuming `use_keyboard_height` directly.

## Batching and transitions

State setters schedule a render through `pythonnative.scheduler`.
[`batch_updates`][pythonnative.scheduler.batch_updates] coalesces
several setter calls into one render, and each reconciler owns a
[`TransitionQueue`][pythonnative.scheduler.TransitionQueue] that
defers renders started inside
[`use_transition`][pythonnative.use_transition].

::: pythonnative.scheduler
    options:
      show_root_heading: false
      show_root_toc_entry: false
      members_order: source
      filters: ["!^_"]

## Next steps

- Compose hooks into a screen: [Components](components.md).
- Run side effects from
  [`use_effect`][pythonnative.use_effect] (after commit) and
  [`use_focus_effect`][pythonnative.use_focus_effect] (after focus).
- Share state across the tree with
  [`create_context`][pythonnative.create_context] and
  [`Context.Provider`][pythonnative.hooks.Context.Provider].
- Animate without re-rendering using [`use_ref`][pythonnative.use_ref]
  + `Animated`; see the [Animations guide](../guides/animations.md).

Web Proxy Viewer  |  New URL  |  Original Page