Заявка на услуги (#18)
Tests / frontend-test (push) Successful in 1m15s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/18
This commit was merged in pull request #18.
This commit is contained in:
2026-09-01 12:48:41 +00:00
parent ddce6b4f25
commit cc2efd8771
56 changed files with 2557 additions and 97 deletions
@@ -1,4 +1,5 @@
import * as React from 'react';
import { useStableCallback } from './useStableCallback';
// Задержка перед тем, как введённый текст уйдёт в запрос. Без неё поиск
// срабатывает на КАЖДОЕ нажатие клавиши: «согласование» — это 12 полных циклов
@@ -57,15 +58,17 @@ export function useRoutedQuery(
const [input, setInput] = React.useState<string>(routeQuery);
const debounced = useDebouncedQuery(input);
const pushed = React.useRef<string>(routeQuery);
// onQueryChange родитель пересоздаёт на каждом рендере: в зависимостях он
// гонял бы эффект вхолостую, а без него эффект навсегда запомнил бы ПЕРВУЮ
// версию колбэка (а она замкнута на раздел, открытый при монтировании, — и
// запрос уезжал бы не в тот маршрут). Стабильная обёртка снимает и то и другое.
const pushQuery = useStableCallback(onQueryChange);
React.useEffect(() => {
if (debounced === pushed.current) return;
pushed.current = debounced;
onQueryChange(debounced);
// onQueryChange пересоздаётся на каждый рендер родителя — в зависимостях
// он гонял бы эффект вхолостую; важен только сам факт смены debounced.
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [debounced]);
pushQuery(debounced);
}, [debounced, pushQuery]);
React.useEffect(() => {
if (routeQuery === pushed.current) return;