
Security News
Deno 2.2 Improves Dependency Management and Expands Node.js Compatibility
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
use-broadcast-ts
Advanced tools
Use the Broadcast Channel API in React easily with hooks or Zustand, and Typescript!
Use the Broadcast Channel API in React easily with hooks
or Zustand
, and Typescript!
npm install use-broadcast-ts
This package allows you to use the Broadcast API with a simple hook or by using Zustand.
Checkout the demo!
// useStore.ts
import { create } from 'zustand';
import { shared } from 'use-broadcast-ts';
type MyStore = {
count: number;
set: (n: number) => void;
};
const useStore = create<MyStore>(
shared(
(set) => ({
count: 0,
set: (n) => set({ count: n })
}),
{ name: 'my-channel' }
)
);
// MyComponent.tsx
import { FC } from 'react';
const MyComponent : FC = () => {
const { count, set } = useStore(
(s) => ({
count: s.count,
set: s.set
})
)
return (
<p>
<p>Count: {count}</p>
<button onClick={() => set(10)}/>
</p>
)
}
export default MyComponent;
You can use the Zustand store like any other Zustand store, but the store will be shared between all the tabs.
On the first "render" of the store, the middleware will check if the store already exists in another tab / window. If the store exits, it will be synchronized, else the store will be created.
If no tab is opened, the store will be created and will be shared as the "main" with the other tabs / windows.
import { FC } from 'react';
import { useBroadcast } from 'use-broadcast-ts';
const MyComponent: FC = () => {
const { state, send } = useBroadcast<{ value: number }>('my-channel', { value: 0 });
return (
<>
<p>My value is: {state.value}</p>
<button onClick={() => send({ value: 10 })} />
</>
);
};
export default MyComponent;
With the example above, the component will re-render when the channel receive or send a value.
import { FC, useEffect } from 'react';
import { useBroadcast } from 'use-broadcast-ts';
const MyComponent: FC = () => {
const { send, subscribe } = useBroadcast<{ value: number }>('my-channel', { value: 0 }, { subscribe: true });
useEffect(() => {
const unsub = subscribe(({ value }) => console.log(`My new value is: ${value}`));
return () => unsub();
}, []);
return (
<>
<button onClick={() => send({ value: 10 })} />
</>
);
};
export default MyComponent;
With the example above, the component will not re-render when the channel receive or send a value but will call the subscribe
callback.
shared(
(set, get, ...) => ...,
options?: SharedOptions
);
Type: SharedOptions
The options of the hook.
Type: string
The name of the channel to use.
Type: number
(default: 100
)
The timeout in ms to wait for the main tab to respond.
Type: boolean
(default: false
)
If true, the store will only synchronize once with the main tab. After that, the store will be unsynchronized.
useBroadcast<T>(name: string, value?: T, options?: UseBroadcastOptions): {
state: T;
send: (value: T) => void;
subscribe: (callback: (e: T) => void) => () => void;
};
Type: string
The name of the channel to use.
Type: T
(default: undefined
)
The initial value of the channel.
Type: UseBroadcastOptions
(default: {}
)
The options of the hook.
Type: boolean | undefined
(default: undefined
)
If true, the hook will not re-render the component when the channel receive a new value but will call the subscribe
callback.
Type: T
The current value of the channel.
Type: (value: T) => void
Send a new value to the channel.
Type: (callback: (e: T) => void) => () => void
Subscribe to the channel. The callback will be called when the channel receive a new value and when the options.subscribe is set to true.
You can send any of the supported types by the structured clone algorithm like :
String
Boolean
Number
Array
Object
Date
...
In short, you cannot send :
Function
Dom Element
See the MDN documentation for more information.
MIT
FAQs
Use the Broadcast Channel API in React easily with hooks or Zustand, and Typescript!
The npm package use-broadcast-ts receives a total of 1,817 weekly downloads. As such, use-broadcast-ts popularity was classified as popular.
We found that use-broadcast-ts demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Deno 2.2 enhances Node.js compatibility, improves dependency management, adds OpenTelemetry support, and expands linting and task automation for developers.
Security News
React's CRA deprecation announcement sparked community criticism over framework recommendations, leading to quick updates acknowledging build tools like Vite as valid alternatives.
Security News
Ransomware payment rates hit an all-time low in 2024 as law enforcement crackdowns, stronger defenses, and shifting policies make attacks riskier and less profitable.