UNPKG

@livingroot/yandex-metrica-ab-react

Version:
90 lines (70 loc) 4.05 kB
# yandex-metrica-ab-react React библиотека для работы с AB экспериментами Метрики ### Лэндинг сервиса https://varioqub.ru/ ### Документация https://yandex.com/support/varioqub/index.html ## Инструкция: ### [Hook](src/example/index.tsx) ### [Provider](src/example/provider.tsx) #### Antiflicker Для провайдера можно настроить режим работы без мигания. `enableAntiflicker` - включает режим. По умолчанию = false `antiflickerTimeout` - задает задержку. По умолчанию 4000 (подсмотрено в optimize). Обычно задержка на получения флагов 50-200мс, но при медленном интернете доходит до секунд. В этом режиме дети MetricaExperimentsProvider не будут отрисованы до тех пор, пока приложение не поличит флаги экспериментов, поэтому в компонентах не нужно проверять ready === true. ### [ClassComponent](src/example/index.tsx) ### SSR С помощью yandex-metrica-ab-node получаем флаги и передаём их в MetricaExperimentsContext приложения. ```app.tsx export const App: React.FC = () => ( <MetricaExperimentsContext.Provider value={{ ...YANDEX_METRICA_AB_NODE_DATA, ready: true }}> ... </MetricaExperimentsContext.Provider> ``` ### Клиентские фичи Словарь Key-Value с данными о посетителе. Необходим для таргетирования экспериментов. Пример ``` <MetricaExperimentsProvider clientId={clientId} clientFeatures={{ lang: 'ru', sex: 'male' }}> ``` ### Указание доступных имён флагов для TS Для удобства использования флагов можно задать список доступных имён. ```flags.ts // Описание флага может быть произвольной строкой. Оно нужно только для вас. export enum AvailableFlags { Flag0 = 'My first flag', HeaderRedButtons = 'Красные кнопки в хедере', } ``` ```header.tsx ... const { flags } = useExperiments<typeof AvailableFlags>({ clientId }); const headerRebButtons = flags.HeaderRedButtons?.[0]; ... ``` или ```header.tsx ... const { flags } = useExperimentsContext<typeof AvailableFlags>(); const headerRebButtons = flags.HeaderRedButtons?.[0]; ... ``` ### Возвращаемый тип Функции useExperiments и useExperimentsContext возвращают объект ``` interface Answer { // Набор флагов экспериментов, в которые попал пользователь // Значение - массив, так как пользователь может попасть в несколько экспериментов с одним флагом // Что делать в компоненте в таком случае - решать разработчику конечного сервиса flags: Record<string, string[] | undefined>; // Значение пользовательской куки, по которой система идентифицирует пользователя в varioqub (с ней ничего делать не нужно) i?: string; // Строка, идентифицирующая набор экспериментов, в которые попал пользователь (с ней ничего делать не нужно) experiments?: string; // Флаг готовности: // false - ещё не известно в какие эксперименты попал пользователь // true - набор экспериментов и его флаги получены ready: boolean; } ```