Skip to content

Remove seeing useContext as HOOKS_STATE#952

Merged
JoviDeCroock merged 1 commit into
mainfrom
JoviDeCroock/signals-rerender-prevention
Jul 7, 2026
Merged

Remove seeing useContext as HOOKS_STATE#952
JoviDeCroock merged 1 commit into
mainfrom
JoviDeCroock/signals-rerender-prevention

Conversation

@JoviDeCroock

@JoviDeCroock JoviDeCroock commented Jul 7, 2026

Copy link
Copy Markdown
Member

The HAS_HOOK_STATE flag exists so the auto-shouldComponentUpdate optimization never skips a render carrying pending hook state. useContext (hook type 9) doesn't need this guard: when a provider's value changes, Preact force-updates every subscriber, bypassing shouldComponentUpdate entirely (https://github.com/preactjs/preact/blob/main/src/create-context.js#L24).

Flagging context consumers as stateful only disabled the props-based render skipping for them. Common combinations like signals + theme/router context lost the optimization for no correctness benefit. With the flag removed, context updates still propagate (covered by the "signals should not stop context from propagating" test) while parent-driven re-renders with unchanged props can be skipped again.

@netlify

netlify Bot commented Jul 7, 2026

Copy link
Copy Markdown

Deploy Preview for preact-signals-demo ready!

Name Link
🔨 Latest commit d7dfa3c
🔍 Latest deploy log https://app.netlify.com/projects/preact-signals-demo/deploys/6a4cb7ff8864170008edfb84
😎 Deploy Preview https://deploy-preview-952--preact-signals-demo.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@changeset-bot

changeset-bot Bot commented Jul 7, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: d7dfa3c

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@preact/signals Patch
preact-signals-devtools Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions

github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Size Change: +7.85 kB (+4.37%)

Total Size: 187 kB

📦 View Changed
Filename Size Change
docs/dist/assets/bench-********.js 1.6 kB -1 B (-0.06%)
docs/dist/assets/devtools-********.js 909 B -3 B (-0.33%)
docs/dist/assets/EmbeddedDevtools-********.js 17.7 kB -8 B (-0.05%)
docs/dist/assets/index-********.js 8.43 kB +7.88 kB (+1457.3%) 🆘
docs/dist/assets/signals.module-********.js 2.65 kB -6 B (-0.23%)
docs/dist/assets/Unmount-********.js 652 B -1 B (-0.15%)
docs/dist/basic-********.js 250 B +2 B (+0.81%)
packages/devtools-ui/dist/devtools-ui.js 16.2 kB -4 B (-0.02%)
packages/devtools-ui/dist/devtools-ui.mjs 15.6 kB -4 B (-0.03%)
packages/preact/dist/signals.js 1.81 kB -6 B (-0.33%)
packages/preact/dist/signals.mjs 1.74 kB -6 B (-0.34%)
ℹ️ View Unchanged
Filename Size
docs/dist/assets/client-********.js 46.6 kB
docs/dist/assets/jsxRuntime.module-********.js 300 B
docs/dist/assets/preact.module-********.js 4.74 kB
docs/dist/assets/signals-core.module-********.js 1.92 kB
docs/dist/assets/style-********.css 5.26 kB
docs/dist/assets/utils.module-********.js 503 B
docs/dist/nesting-********.js 1.15 kB
docs/dist/react-********.js 242 B
packages/core/dist/signals-core.js 1.94 kB
packages/core/dist/signals-core.mjs 1.93 kB
packages/debug/dist/debug.js 4.64 kB
packages/debug/dist/debug.mjs 4.15 kB
packages/devtools-adapter/dist/devtools-adapter.js 2.36 kB
packages/devtools-adapter/dist/devtools-adapter.mjs 2.07 kB
packages/preact-transform/dist/signals-transform.js 1.3 kB
packages/preact-transform/dist/signals-transform.mjs 1.29 kB
packages/preact-transform/dist/signals-transform.umd.js 1.42 kB
packages/react-transform/dist/signals-transform.js 7.28 kB
packages/react-transform/dist/signals-transform.mjs 6.47 kB
packages/react-transform/dist/signals-transform.umd.js 7.39 kB
packages/react/dist/signals.js 214 B
packages/react/dist/signals.mjs 165 B
packages/vite-plugin/dist/vite-plugin.js 8.86 kB
packages/vite-plugin/dist/vite-plugin.mjs 7.86 kB

compressed-size-action

@JoviDeCroock
JoviDeCroock force-pushed the JoviDeCroock/signals-rerender-prevention branch from 246b62b to d7dfa3c Compare July 7, 2026 08:25
@JoviDeCroock
JoviDeCroock merged commit 89000a2 into main Jul 7, 2026
6 checks passed
@JoviDeCroock
JoviDeCroock deleted the JoviDeCroock/signals-rerender-prevention branch July 7, 2026 10:12
@github-actions github-actions Bot mentioned this pull request Jul 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants