{
  "id": "67981896ec63617a429becd3",
  "source": "solid:signals",
  "type": "github-document",
  "title": "create-reaction",
  "content": "---\ntitle: createReaction\nuse_cases: \u003e-\n  custom tracking logic, one-time reactions, separating tracking from execution,\n  advanced reactive patterns\ntags:\n  - reactivity\n  - tracking\n  - custom\n  - effects\n  - advanced\nversion: '1.0'\ndescription: \u003e-\n  Separate tracking from execution with createReaction. Create one-time reactive\n  side effects that run on first dependency change only.\n---\n\n```ts\nimport { createReaction } from \"solid-js\"\n\nfunction createReaction(onInvalidate: () =\u003e void): (fn: () =\u003e void) =\u003e void\n\n```\n\nSometimes it is useful to separate tracking from re-execution.\nThis primitive registers a side effect that is run the first time the expression wrapped by the returned tracking function is notified of a change.\n\n```ts\nconst [s, set] = createSignal(\"start\")\n\nconst track = createReaction(() =\u003e console.log(\"something\"))\n\n// run the reaction next time `s` changes.\ntrack(() =\u003e s())\n\nset(\"end\") // \"something\"\n\nset(\"final\") // no-op since the reaction only runs on the first update, need to call `track` again.\n```",
  "url": "https://github.com/solidjs/solid-docs/blob/HEAD/src/routes/reference/secondary-primitives/create-reaction.mdx",
  "metadata": {
    "path": "src/routes/reference/secondary-primitives/create-reaction.mdx",
    "repo": "solidjs/solid-docs",
    "repo_url": "https://github.com/solidjs/solid-docs.git",
    "size": 1038,
    "source_type": "github"
  },
  "hash": "ff59d24e0a0ccc5d54212062e0a36b8d5596c3eff156830c38bab4f890891d35",
  "timestamp": "2026-02-23T11:43:00.19060486+01:00"
}