#javascript #reactjs #gatsby
Вопрос:
Я пытаюсь использовать react-gtm-module
в своем проекте Gatsby, я использовал библиотеку @loadable/component
для загрузки этого модуля в свой компонент. Итак, когда я запускаю gatsby develop
, я получаю ошибку TagManager.initialize is not a function
Это и есть код:
import loadable from '@loadable/component';
const TagManager = loadable(() => import('react-gtm-module'));
export const setupGtm = () => {
if (typeof window !== 'undefined') {
TagManager.initialize({
gtmId: 'GTM-ID',
});
}
};
Я бы очень хотел использовать react-gtm-module
, потому что у меня уже есть несколько предварительно настроенных кодов, кто-нибудь знает, как использовать no gatsby?
Спасибо!!
Комментарии:
1. У вас есть модуль GTM, настроенный в вашем
gatsby-config.js
?
Ответ №1:
Чтобы это работало должным образом, вам необходимо установить плагин Gatsby, называемый Google Tagmanager
внутри вашего проекта gatsby, вы можете это сделать. запустив
npm install gatsby-plugin-google-tagmanager
Когда вы закончите, вы должны настроить плагин в своем gatsby-config.js
gatsby-config.ts
файле или.
Ознакомьтесь с этим документом от Гэтсби для получения дополнительной информации.
Комментарии:
1. Спасибо, я попробовал с этим плагином, и теперь я получаю ошибку: gtag не определен
2. Определение gtag появится в вашем
gatsby-config.js
файле, как вы его там настроили? Или это сделал ты?
Ответ №2:
Не используйте зависимость на основе реакции. Для этого гораздо проще использовать собственные плагины Gatsby, так как они автоматически вставят скрипт в нужные места. Я бы предложил отказаться от этого фрагмента и использовать gatsby-plugin-google-tagmanager
:
// In your gatsby-config.js
plugins: [
{
resolve: "gatsby-plugin-google-tagmanager",
options: {
id: "YOUR_GOOGLE_TAGMANAGER_ID",
// Include GTM in development.
//
// Defaults to false meaning GTM will only be loaded in production.
includeInDevelopment: false,
// datalayer to be set before GTM is loaded
// should be an object or a function that is executed in the browser
//
// Defaults to null
defaultDataLayer: { platform: "gatsby" },
// Specify optional GTM environment details.
gtmAuth: "YOUR_GOOGLE_TAGMANAGER_ENVIRONMENT_AUTH_STRING",
gtmPreview: "YOUR_GOOGLE_TAGMANAGER_ENVIRONMENT_PREVIEW_NAME",
dataLayerName: "YOUR_DATA_LAYER_NAME",
// Name of the event that is triggered
// on every Gatsby route change.
//
// Defaults to gatsby-route-change
routeChangeEventName: "YOUR_ROUTE_CHANGE_EVENT_NAME",
// Defaults to false
enableWebVitalsTracking: true,
},
},
]
Вы можете опустить параметры, которые вы не будете использовать.