narkq / react-yandex-metrika

React component for Yandex.Metrika
128 stars 25 forks source link

Добавить метод ym.init() #41

Closed alekseyBatuhtin closed 3 years ago

alekseyBatuhtin commented 4 years ago

Инициализация текущим методом <YMInitializer /> создаёт следующие неудобства:

  1. К сожалению не все могут вынести инициализацию в другие места по ряду причин.

    Please note that you need to initialize the tracker object only once. Because of that, you should insert initializer to the place where it won't be remounted (that means at least outside of router scope).

  2. Установка состояний, отложенная инициализация

Мой пример создать YMProvider и вынести работу внутрь него.

const YMProvider = ({ children }) => {
    const [isInit, setInit] = useState(false)
    const userId = useSelector(getUserId)
        const params = {}
    useEffect(() => !isInit && ym.init(params, () => setInit(true)), [isInit])
    useEffect(
        () => {
            if (isInit) {
                ym('setUserID', userId)
            }
        },
        [userId, isInit]
    )
     [userId]
    )

    return children
}

Также мне необходимо инициализировать gtm.js строго после Я.Метрики, вариант лезть в DOM напрямую мне не импонирует.

alekseyBatuhtin commented 3 years ago

/close