|
1 | | -import { useState, useCallback, useRef, useEffect } from 'react'; |
| 1 | +import { useState, useCallback, useRef, useEffect, useMemo } from 'react'; |
2 | 2 | import MonacoEditor from '@monaco-editor/react'; |
3 | 3 | import type * as Monaco from 'monaco-editor'; |
4 | 4 | import type { ProjectEntry, FileEntry } from '../types/project'; |
@@ -369,11 +369,14 @@ export default function Editor({ project, files, fileContents, onDisconnect, onC |
369 | 369 | const [attributionPref, setAttributionPref] = usePreference('attributionEnabled'); |
370 | 370 | const attributionEnabled = currentFormat === 'q2-debug' && attributionPref; |
371 | 371 | const attribution = useAttribution(attributionEnabled ? (currentFile?.path ?? null) : null, displayContent); |
372 | | - const attributionContextValue = attribution ? { |
373 | | - source: attribution.source, |
374 | | - identities: identities ?? {}, |
375 | | - sourceText: displayContent, |
376 | | - } : null; |
| 372 | + const attributionContextValue = useMemo( |
| 373 | + () => attribution ? { |
| 374 | + source: attribution.source, |
| 375 | + identities: identities ?? {}, |
| 376 | + sourceText: displayContent, |
| 377 | + } : null, |
| 378 | + [attribution, identities, displayContent], |
| 379 | + ); |
377 | 380 |
|
378 | 381 | // When replay content changes, update Monaco and VFS for display. |
379 | 382 | // Writing to VFS ensures the preview renderer sees historical content. |
|
0 commit comments