Skip to content

Commit 0960555

Browse files
committed
fix date picker re-renders by breaking debounce loop
1 parent e40d1ea commit 0960555

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

app/components/form/fields/DateTimeRangePicker.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,8 +84,15 @@ export function useDateTimeRangePicker({
8484
items,
8585
}
8686

87-
const [startTime] = useDebounce(range.start.toDate(tz), 400)
88-
const [endTime] = useDebounce(range.end.toDate(tz), 400)
87+
// Without these useMemos, we get re-renders every 400ms because when the
88+
// debounce timeout expires, it updates the value, which triggers a render for
89+
// itself because the time gets remade by toDate() (i.e., even though it is
90+
// the same time, it is a new object)
91+
const rangeStart = useMemo(() => range.start.toDate(tz), [range.start])
92+
const [startTime] = useDebounce(rangeStart, 400)
93+
94+
const rangeEnd = useMemo(() => range.end.toDate(tz), [range.end])
95+
const [endTime] = useDebounce(rangeEnd, 400)
8996

9097
return {
9198
startTime,

app/pages/SiloUtilizationPage.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,11 @@ export async function clientLoader() {
3636
return null
3737
}
3838

39+
console.time('render')
40+
3941
export default function SiloUtilizationPage() {
42+
console.timeEnd('render')
43+
console.time('render')
4044
const { me } = useCurrentUser()
4145

4246
const siloId = me.siloId

0 commit comments

Comments
 (0)