refactor: BacklinkPanel.tsx の targetPageName を useMemo 化 (#237)#243
Merged
Conversation
`targetPageName = basename(targetFilePath).slice(0, -3).normalize("NFC")` を
毎 render 計算していたため、`normalize("NFC")` が collapse toggle / fileTreeVersion
bump / contentVersion bump 等の度に短命 string allocation を発生させていた。
`useMemo([targetFilePath])` で memoize し、targetFilePath 不変時は再計算を抑止。
issue の提案 snippet (line 94 で wrap) は早期 return (line 81-89) より後ろで
hook を呼ぶ Rules of Hooks 違反になるため、targetFilePath useMemo の直後 (line 41)
に移動。null fallback として "" を返す (panel は targetFilePath null 時に早期
return するため、targetPageName は読まれない)。
ymnao
added a commit
that referenced
this pull request
Jul 5, 2026
- package.json の version を 0.6.0 → 0.7.0 に bump - CHANGELOG.md に v0.7.0 エントリを追加 (#243 〜 #280) - Fixed: FileTree scroll regression (#276)、electron e2e launch teardown timeout 拡大 (#247) - Internal: #209 3 項目 (drift-lock 系 refactor #278/#279/#280)、settings setter 集約 (#273 → #277)、search/workspace/backlink 系 helper 抽出 15 件 - Dependencies: electron 43.0.0 / p-limit 7.3.0 major bump (#275)、Dependabot 7 件 combine (#274)、pnpm-workspace.yaml overrides で @codemirror dual copy を恒久防止 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
src/components/search/BacklinkPanel.tsxのtargetPageName計算をuseMemo化し、collapse toggle /fileTreeVersionbump /contentVersionbump 等で BacklinkPanel が再 render する度に発生していたbasename().slice().normalize("NFC")の短命 string allocation を抑制する。関連 Issue
Closes #237
移行 Stage
該当なし (Phase 2 後の内部 quality 改善)。
変更内容
src/components/search/BacklinkPanel.tsx:targetPageName = basename(targetFilePath).slice(0, -3).normalize("NFC")をuseMemo([targetFilePath])で wraptargetFilePathuseMemo の直後 (line 41) に移動targetFilePathが null の場合は""を返す (panel はその場合早期 return するためtargetPageNameは読まれない)targetFilePathuseMemo (line 29-34) と同じ pattern に揃え、useMemoimport は既存のものを利用動作確認
node_modules/.bin/tsc --noEmitcleannode_modules/.bin/biome check src/components/search/BacklinkPanel.tsxcleannode_modules/.bin/vitest run全 2228 件 pass (2 件 skip)onNavigate(reference.filePath, reference.lineNumber, targetPageName)の渡し先 prop signature は不変、e2e mock 側 (e2e/helpers/electron-api-mock.ts) の対称対応は不要。スクリーンショット
UI 変更なし。