UNPKG

@yandex/ui

Version:

Yandex UI components

30 lines (29 loc) 1.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useUniqId = void 0; var react_1 = require("react"); var canUseDOM_1 = require("../lib/canUseDOM"); var ssr_1 = require("../ssr"); /** * Реакт-хук для генерации уникального id. * * При использовании в проекте ssr необходимо использовать * `SSRProvider` для синхронизации id между сервером и клиентом. * * @param prefix - Префикс для генерации уникального id (по умолчанию `xuniq`) * * @example * const id = useUniqId() */ function useUniqId(prefix) { if (prefix === void 0) { prefix = 'xuniq'; } var context = react_1.useContext(ssr_1.SSRContext); // NOTE: Не используем кэширование через useRef или useState, // т.к. в таком случае происходит постоянный инкремент значения. // eslint-disable-next-line react-hooks/exhaustive-deps var id = react_1.useMemo(function () { return prefix + "-" + context.id + "-" + ++context.value; }, []); console.assert(canUseDOM_1.canUseDOM() || context !== ssr_1.initialContextValue, 'При серверном рендеринге необходимо обернуть приложение в <SSRProvider>' + ' для синхронизации id между сервером и клиентом.'); return id; } exports.useUniqId = useUniqId;