@yandex/ui
Version:
Yandex UI components
30 lines (29 loc) • 1.55 kB
JavaScript
;
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;