Commit 2cfba4f
review: split useViewState into a read-only data hook
Both bugbot comments pointed at the same root cause: useViewState
returns a fresh object every render, and PullRequestLayout was calling
it just to read isChapterViewed — instantiating four mutation hooks it
never used and tagging them as a useMemo dep that never stabilized.
Adds useViewStateData(runId) that returns memoized Sets + helpers + the
loading/error fields. useViewState now wraps it and adds the four
mutations on top, sharing the same query cache. PullRequestLayout uses
useViewStateData and depends on chapterIdSet (a stable reference) for
the viewedCount memo, so the count actually caches across renders and
no unused mutation hooks get instantiated.
ChaptersList still calls useViewState since it needs both reads and
mutations. The two hooks share the same query key, so there's still
exactly one network fetch per runId.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 2aeb7b4 commit 2cfba4f
2 files changed
Lines changed: 46 additions & 18 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
45 | | - | |
46 | | - | |
47 | | - | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
48 | 50 | | |
49 | | - | |
50 | | - | |
51 | 51 | | |
52 | 52 | | |
53 | 53 | | |
54 | 54 | | |
55 | 55 | | |
56 | | - | |
57 | | - | |
58 | | - | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
59 | 62 | | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
60 | 71 | | |
61 | | - | |
| 72 | + | |
62 | 73 | | |
63 | 74 | | |
64 | 75 | | |
65 | 76 | | |
66 | 77 | | |
67 | 78 | | |
68 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
69 | 98 | | |
70 | 99 | | |
71 | 100 | | |
| |||
136 | 165 | | |
137 | 166 | | |
138 | 167 | | |
| 168 | + | |
139 | 169 | | |
140 | 170 | | |
141 | | - | |
142 | 171 | | |
143 | 172 | | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | 173 | | |
148 | 174 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
102 | | - | |
103 | | - | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
104 | 106 | | |
105 | 107 | | |
106 | 108 | | |
107 | 109 | | |
108 | | - | |
| 110 | + | |
109 | 111 | | |
110 | | - | |
| 112 | + | |
111 | 113 | | |
112 | 114 | | |
113 | 115 | | |
| |||
0 commit comments