Next.js SDK
#
BackgroundΠΠ»Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠΈΡΠ° ΡΠ»Π°Π³ΠΎΠ² Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² ΡΠ²ΠΎΠΈΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ
Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅ΡΡΠ½ΠΉ sdk expf-sigma-node.js.
Next.js ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°: getInitialProps ΠΈ getServerSideProps.
ΠΡΠ»ΠΈ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ sdk expf-sigma.js, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠΈΡΠ° ΡΠ»Π°Π³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΡΡ Π² ΠΊΠΎΠΌΠΎΠ½Π΅Π½ΡΠ°Ρ
.
- ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ sdk c ssr, ΡΡΠΊΡΠΈΡ getServerSideProps
- ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ sdk c ssr, ΡΡΠΊΡΠΈΡ getInitialProps
- ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ sdk Π±Π΅Π· ssr
#
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ sdk c ssr, ΡΡΠΊΡΠΈΡ getServerSideProps#
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° SDK- NPM
- Yarn
npm i expf-sigma-node.js
yarn add expf-sigma-node.js
#
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ SDKΠ‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
/helpers/sigma.js
import Sigma from 'expf-sigma-node.js';
const token = <TOKEN>;
export const sigmaGetExperimentParam = async (expId, paramName, userProps = {}) => { const userData = userProps; const sigma = new Sigma(token, userData);
const variant = await sigma.getExperiment(expId).then( (res) => res.getParamValue(paramName) ); if (variant) return variant; return;}
export const sigmaGetAllUserExperiments = async (userProps = {}) => { const userData = userProps; const sigma = new Sigma(token, userData);
const userSigmaExps = await sigma.getAllUserExperiments()
if (userSigmaExps) return userSigmaExps; return;}
#
Π‘ΡΡΠ°Π½ΠΈΡΠ° Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠΌΠ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠΊΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
- ΡΡΡΠ°Π½ΠΈΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΠΎΡΠ°, ΠΈ ΡΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π½ΡΠΌΠΈ ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΠ°ΠΌΠΈ.
- ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ
- Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π΅ΡΠΈ Π΄Π°Π½Π½ΡΡ Π² GA
- Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π΄Π°Π½ΡΠ΅ Π² GA, Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ ΡΠΊΡΠΈΠΏΡ "https://www.googletagmanager.com/gtag/js" ΠΈ Ρ ΡΠΊ useEffect()
- ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ getServerSideProps
/pages/InnerPage/index.js
import BannerName from '../../components/BannerName.js';import { sigmaGetExperimentParam, sigmaGetAllUserExperiments } from "../../helpers/sigma.js";import React from 'react';import Script from 'next/script'
export default function InnerPage({ isBannerNameExperiment, allExperiments }) { React.useEffect( () => { window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments) }; gtag('event', 'get', { event_category: 'check', event_action: 'check', dimension1: allExperiments }); console.log(window.dataLayer) }, []);
return ( <> <Script src='https://www.googletagmanager.com/gtag/js?id=UA-000000-1' strategy='beforeInteractive' /> <main> {isBannerNameExperiment && <BannerName /> } </main> </> )}
export const getServerSideProps = async ({ res, req }) => { const userId = userCooKieId || req.userId; // ΠΊΡΠΊΠ° ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ id
const isBannerNameExperiment = await sigmaGetExperimentParam(<expId>, <expParam>, { userId }); const allExperiments = await sigmaGetAllUserExperiments({ userId });
return { props: { isBannerNameExperiment, allExperiments, }, }}
#
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ sdk c ssr, ΡΡΠΊΡΠΈΡ getInitialProps#
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° SDK- NPM
- Yarn
npm i expf-sigma-node.js
yarn add expf-sigma-node.js
#
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ SDKΠ‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΈ ΡΠΊΡΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
/helpers/sigma.js
import Sigma from 'expf-sigma-node.js';
const token = <TOKEN>;
export const sigmaGetExperimentParam = async (expId, paramName, userProps = {}) => { const userData = userProps; const sigma = new Sigma(token, userData);
const variant = await sigma.getExperiment(expId).then( (res) => res.getParamValue(paramName) ); if (variant) return variant; return;}
export const sigmaGetAllUserExperiments = async (userProps = {}) => { const userData = userProps; const sigma = new Sigma(token, userData);
const userSigmaExps = await sigma.getAllUserExperiments()
if (userSigmaExps) return userSigmaExps; return;}
#
Π‘ΡΡΠ°Π½ΠΈΡΠ° Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠΌΠ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠΊΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
- Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠΌΠΏΠΎΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΡΠ΅Π»Π΅ InnerPage.getInitialProps
- ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ getInitialProps
/pages/InnerPage/index.js
import BannerName from '../../components/BannerName.js';
function InnerPage({ isBannerNameExperiment, allExperiments }) { return ( <> <main> {isBannerNameExperiment && <BannerName /> } </main> </> )}
InnerPage.getInitialProps = async () => { const sigma = await import('../../helpers/sigma.js') const userId = userCooKieId || req.userId; // ΠΊΡΠΊΠ° ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΉ id
const isBannerNameExperiment = await sigma.sigmaGetExperimentParam(<expId>, <expParam>, { userId }); const allExperiments = await sigma.sigmaGetAllUserExperiments({ userId });
return { isBannerNameExperiment, allExperiments } }}
export default InnerPage;
#
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ sdk Π±Π΅Π· ssr#
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° SDK- NPM
- Yarn
npm i expf-sigma.js
yarn add expf-sigma.js
#
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ SDKΠ‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ hook, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ sdk ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ², ΡΠΈΡΠ° ΡΠ»Π°Π³ΠΎΠ².
./src/hooks/useSigma.js
import Sigma from "expf-sigma.js";import { useEffect, useState } from 'react';
export function useSigma () { const [sigma, setSigmaState] = useState({});
useEffect(() => { const sigmaData = async () => { const sigma = new Sigma(); const token = 'AE541D2D-0A51-4BB8-90D5-947B9DE05DD9';
sigma.init({ token, userData: { email: '1ex@mail.ru', }, });
const browserName = await sigma.checkFlag('browser_name'); const buttonColor = await sigma.checkFlag('button_color'); const exParam = await sigma.getExperiment('param').then((res) => res.getParamValue('param_name'));
setSigmaState({ browserName, buttonColor, exParam }); }
sigmaData(); }, []);
return [sigma];}
Π ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ Π²ΡΠ·Π²Π°ΡΡ hook, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
./src/components/Title.js
import { useSigma } from "../hooks/useSigma";
export default function Title() { const [sigma] = useSigma();
return ( <h1>{sigma.browserName}</h1> );}
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Ρ hook useSigma, Π½ΡΠΆΠ½ΠΎ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ssr ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ
import dynamic from 'next/dynamic';const DynamicComponentWithNoSSR = dynamic( () => import('../../components/Title.js'), { ssr: false })
export default function ClientSide() { return ( <> <DynamicComponentWithNoSSR /> </> )}