
Security News
TC39 Advances Temporal to Stage 4 Alongside Several ECMAScript Proposals
TC39’s March 2026 meeting advanced eight ECMAScript proposals, including Temporal reaching Stage 4 and securing its place in the ECMAScript 2026 specification.
@blac/react
Advanced tools
> ⚠️ **Warning:** This project is currently under active development. The API may change in future releases. Use with caution in production environments.
⚠️ Warning: This project is currently under active development. The API may change in future releases. Use with caution in production environments.
React integration for BlaC with automatic re-render optimization.
npm install @blac/react @blac/core
# or
pnpm add @blac/react @blac/core
# or
yarn add @blac/react @blac/core
import { Cubit } from '@blac/core';
import { useBloc } from '@blac/react';
class CounterCubit extends Cubit<{ count: number }> {
constructor() {
super({ count: 0 });
}
increment = () => this.emit({ count: this.state.count + 1 });
decrement = () => this.emit({ count: this.state.count - 1 });
}
function Counter() {
const [state, counter] = useBloc(CounterCubit);
return (
<div>
<p>Count: {state.count}</p>
<button onClick={counter.increment}>+</button>
<button onClick={counter.decrement}>-</button>
</div>
);
}
Connects a component to a state container with automatic re-renders on state changes.
const [state, bloc, ref] = useBloc(MyBloc);
Returns: [state, bloc, ref]
state - Current state snapshotbloc - Bloc instance (proxied for tracking; call methods on it)ref - Internal component ref (advanced usage)Auto-tracking (default): Tracks accessed properties and getters.
function UserProfile() {
const [state] = useBloc(UserBloc);
return <h1>{state.name}</h1>;
}
Manual dependencies: Provide a dependency selector (disables auto-tracking).
function Counter() {
const [state] = useBloc(CounterCubit, {
dependencies: (state) => [state.count],
});
return <p>{state.count}</p>;
}
No tracking: Re-render on any state change.
function FullState() {
const [state] = useBloc(MyBloc, { autoTrack: false });
return <pre>{JSON.stringify(state)}</pre>;
}
useBloc(MyBloc, {
autoTrack: true,
dependencies: (state, bloc) => [state.count, bloc],
instanceId: 'editor-1',
onMount: (bloc) => console.log('Mounted', bloc),
onUnmount: (bloc) => console.log('Unmounted', bloc),
});
| Option | Type | Description |
|---|---|---|
autoTrack | boolean | Enable auto-tracking (default: true) |
dependencies | (state, bloc) => unknown[] | Manual dependency selector |
instanceId | string | number | Custom instance identifier |
onMount | (bloc) => void | Called when component mounts |
onUnmount | (bloc) => void | Called when component unmounts |
function A() {
useBloc(CounterCubit); // shared instance
}
function B() {
useBloc(CounterCubit); // same shared instance
}
import { Cubit, blac } from '@blac/core';
@blac({ isolated: true })
class FormCubit extends Cubit<FormState> {}
function FormA() {
useBloc(FormCubit); // unique instance per component
}
useBloc(EditorCubit, { instanceId: 'editor-1' });
useBloc(EditorCubit, { instanceId: 'editor-1' }); // same instance
useBloc(EditorCubit, { instanceId: 'editor-2' }); // different instance
Configure global defaults:
import { configureBlacReact } from '@blac/react';
configureBlacReact({
autoTrack: true,
});
useSyncExternalStore)MIT
FAQs
> ⚠️ **Warning:** This project is currently under active development. The API may change in future releases. Use with caution in production environments.
The npm package @blac/react receives a total of 126 weekly downloads. As such, @blac/react popularity was classified as not popular.
We found that @blac/react demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer 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
TC39’s March 2026 meeting advanced eight ECMAScript proposals, including Temporal reaching Stage 4 and securing its place in the ECMAScript 2026 specification.

Research
/Security News
Since January 31, 2026, we identified at least 72 additional malicious Open VSX extensions, including transitive GlassWorm loader extensions targeting developers.

Research
Six malicious Packagist packages posing as OphimCMS themes contain trojanized jQuery that exfiltrates URLs, injects ads, and loads FUNNULL-linked redirects.