getState()
La méthode getState() renvoie une copie de l’état calculé de la couche de données client (ACDL) Adobe : résultat de la fusion de toutes les données transmises jusqu’à présent.
adobeDataLayer.getState(path?: string | string[]): any
Cette méthode n’existe qu’après le chargement de l’ACDL. Si votre code peut s’exécuter avant, appelez-le à partir d’une fonction que vous poussez. Voir Méthodes d’appel sécurisées.
Obtention de l’état calculé entier entire-state
Appeler getState() sans arguments :
window.adobeDataLayer = window.adobeDataLayer || [];
window.adobeDataLayer.push({ page: { title: "Getting started" } });
window.adobeDataLayer.push({ component: { "hero-1": { title: "Learn more", link: "learn-more.html" } } });
window.adobeDataLayer.push(function(dl) {
console.log(dl.getState());
});
La console affiche l’objet suivant :
{
"page": {
"title": "Getting started"
},
"component": {
"hero-1": {
"title": "Learn more",
"link": "learn-more.html"
}
}
}
Si rien n’a été envoyé, getState() renvoie un objet vide ({}).
Obtenir une valeur à un chemin d’accès paths
Transmettez un chemin d’accès pour obtenir une valeur de l’état calculé. Séparez les clés du chemin par des points :
window.adobeDataLayer.push(function(dl) {
dl.getState("component.hero-1"); // { title: "Learn more", link: "learn-more.html" }
dl.getState("component.hero-1.title"); // "Learn more"
});
Les règles suivantes s’appliquent aux chemins d’accès :
- Éléments de tableau : utilisez l’index de l’élément comme clé, par exemple
cart.items.0.sku. ACDL 3.x ne prend pas en charge la notation entre crochets, telle quecart.items[0].sku. - Clés contenant des points : transmettez le chemin d’accès sous la forme d’un tableau de clés plutôt que d’une chaîne, comme
["component", "hero.1", "title"]. - Valeurs manquantes : si une clé du chemin n’existe pas,
getState()renvoieundefined. Il ne renvoie pas d’erreur. - Type de valeur renvoyée : la valeur du chemin d’accès peut être de n’importe quel type, tel qu’un objet, un tableau, une chaîne, un nombre ou une valeur booléenne.
Les valeurs renvoyées sont des copies copies
getState() renvoie une copie de l’état calculé, et non l’état calculé lui-même. La modification de l’objet renvoyé ne modifie pas la couche de données :
const state = adobeDataLayer.getState();
state.page.title = "Changed";
adobeDataLayer.getState("page.title"); // Still "Getting started"
Pour modifier l’état calculé, effectuez la modification avec push().
Chaque appel copie l’ensemble de l’état calculé, même lorsque vous transmettez un chemin d’accès. Sur les pages comportant une couche de données volumineuse, évitez d’appeler getState() dans un code qui s’exécute très souvent, tel qu’un gestionnaire de défilement. Lisez la valeur une fois et réutilisez-la.
Lire l’état dans un écouteur d’événement in-listener
Lorsqu’un écouteur d’événement 🔗 s’exécute, l’état calculé inclut déjà les données de la notification push qui l’a déclenché :
window.adobeDataLayer.push(function(dl) {
dl.addEventListener("adobeDataLayer:change", function(event) {
console.log("New page title:", dl.getState("page.title"));
}, { path: "page.title" });
});