Skip to content

Add useOnMessage and useSendMessage React messenger hooks#2252

Merged
einari merged 3 commits into
mainfrom
feat/react-messaging-hooks
May 26, 2026
Merged

Add useOnMessage and useSendMessage React messenger hooks#2252
einari merged 3 commits into
mainfrom
feat/react-messaging-hooks

Conversation

@einari
Copy link
Copy Markdown
Contributor

@einari einari commented May 26, 2026

Added

  • useOnMessage React hook that subscribes to messages of a given type from the nearest MessengerScope, with an optional filter predicate that receives the typed message and decides whether the consumer is interested.
  • useSendMessage React hook that returns a stable function for publishing messages to the nearest MessengerScope.

einari added 3 commits May 26, 2026 15:16
Expose two new hooks around MessengerScopeContext so components can subscribe
to and publish typed messages without holding a reference to the messenger.

useOnMessage takes a message constructor, a callback, and an optional filter
that receives the actual typed message and decides whether the consumer is
interested. The callback and filter are kept in refs so neither needs to be
memoized, and the subscription is cleaned up on unmount.

useSendMessage returns a stable, bound publish function.
Cover the BDD scenarios for both hooks: matching publish, non-matching type,
filter acceptance and rejection, unmount cleanup, callback changes without
re-subscribing, scope trickle-down, and stable publish function reference
across renders.
Add Subscribing and Publishing sections covering the new hooks, including the
optional filter on useOnMessage that narrows on message content without
re-subscribing.
@einari einari added the minor label May 26, 2026
@einari einari merged commit 7a5fc8c into main May 26, 2026
9 checks passed
@einari einari deleted the feat/react-messaging-hooks branch May 26, 2026 13:17
@github-actions
Copy link
Copy Markdown

NuGet packages for this PR, e.g. Cratis.Arc:
https://github.com/cratis/arc/packages/1655206?version=20.26.20

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant