데이터 및 계산된 상태
ACDL(Adobe 클라이언트 데이터 레이어)은 푸시하는 모든 데이터 개체를 계산된 상태라는 단일 개체에 병합합니다. 모든 스크립트는 언제든지 getState()을(를) 사용하여 계산된 상태를 읽을 수 있습니다. 모든 데이터를 한 번에 또는 다른 스크립트에서 여러 작은 푸시로 푸시할 수 있습니다. 계산된 상태는 두 방법 중 하나와 동일합니다.
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({ page: { language: "en" } });
이러한 푸시 후 adobeDataLayer.getState()이(가) 다음 개체를 반환합니다.
{
"page": {
"title": "Getting started",
"language": "en"
},
"component": {
"hero-1": {
"title": "Learn more",
"link": "learn-more.html"
}
}
}
이벤트 개체는 데이터를 전달할 수도 있습니다. ACDL은 계산된 상태에 저장되지 않은 event 및 eventInfo을(를) 제외한 이벤트 개체의 모든 키를 병합합니다. 이벤트를 참조하세요.
병합 규칙 merge-rules
데이터를 푸시할 때 ACDL은 푸시된 객체의 각 키를 계산된 상태와 비교합니다.
null 또는 undefined예를 들어 아래의 두 번째 푸시는 page.title만 변경됩니다. page.language 키는 값을 유지합니다.
adobeDataLayer.push({ page: { title: "Home", language: "en" } });
adobeDataLayer.push({ page: { title: "Products" } });
adobeDataLayer.getState("page");
// { title: "Products", language: "en" }
데이터 삭제 delete
키를 삭제하려면 null 또는 undefined을(를) 해당 값으로 푸시합니다.
adobeDataLayer.push({ page: { title: "Products", language: "en" }, user: { id: "123" } });
adobeDataLayer.push({ page: { language: null }, user: null });
adobeDataLayer.getState();
// { page: { title: "Products" } }
개체 내의 마지막 키를 삭제하면 빈 개체가 남습니다. 개체도 삭제하려면 개체 자체에 대해 null을(를) 푸시합니다.
adobeDataLayer.push({ page: { title: null } });
adobeDataLayer.getState();
// { page: {} }
path 옵션을 사용하는 리스너는 해당 경로에서 키 또는 키를 포함하는 개체를 삭제할 때 호출됩니다.
배열 arrays
배열은 단일 값으로 저장됩니다. 이미 배열을 보유하고 있는 키에 배열을 푸시하면 ACDL이 전체 배열을 대체합니다. 항목을 추가하려면 새 항목으로 전체 배열을 푸시합니다.
adobeDataLayer.push({ cart: { skus: ["a-100", "b-200"] } });
adobeDataLayer.push({ cart: { skus: ["a-100", "b-200", "c-300"] } });
adobeDataLayer.getState("cart.skus");
// ["a-100", "b-200", "c-300"]
ACDL은 푸시하는 배열에서 null 및 undefined 항목을 제거합니다.
adobeDataLayer.push({ cart: { skus: ["a-100", null, "c-300"] } });
adobeDataLayer.getState("cart.skus");
// ["a-100", "c-300"]
["c"]을(를) ["a", "b"] 이상으로 푸시하면 ["c", "b"]이(가) 됩니다. 두 버전에서 동일한 결과를 얻으려면 항상 전체 배열을 푸시하십시오.값의 유형 변경 change-type
개체를 문자열, 숫자, 부울 또는 배열로 바꿀 수 있습니다. 그러나 ACDL 3.x에서 현재 문자열, 숫자, 부울 또는 배열을 보유한 키로 개체를 푸시하면 값이 대체되지 않습니다. 현재 값이 0, false이거나 빈 문자열이면 대신 키가 삭제됩니다.
값을 개체로 변경하려면 먼저 키를 삭제한 다음 개체를 푸시합니다.
adobeDataLayer.push({ product: "a-100" });
adobeDataLayer.push({ product: null });
adobeDataLayer.push({ product: { sku: "a-100", price: 25 } });
adobeDataLayer.getState("product");
// { sku: "a-100", price: 25 }
이러한 상황을 방지하는 가장 좋은 방법은 데이터 레이어 디자인에서 각 키의 유형을 일관되게 유지하는 것입니다.
값 유형 value-types
데이터 레이어에서 문자열, 숫자, 부울, null, 일반 개체 및 배열과 같은 JSON 호환 값을 사용합니다. ACDL은 다른 종류의 객체를 병합할 때 변환합니다.
Date 개체{})입니다. 날짜를 문자열(예: new Date().toISOString())이나 숫자로 저장합니다.{})입니다.Map 또는 Set{})입니다.0 및 false일반 개체만 푸시합니다. ACDL은 문자열, 숫자 및 배열과 같은 다른 값을 직접 푸시할 때 거부합니다. push()을(를) 참조하십시오.
참조가 아닌 사본 copies
계산된 상태는 푸시하는 객체와 독립적입니다. 푸시한 후 오브젝트를 변경해도 계산된 상태는 변경되지 않습니다.
const page = { title: "Home" };
adobeDataLayer.push({ page: page });
page.title = "Changed";
adobeDataLayer.getState("page.title");
// "Home"
마찬가지로 getState()은(는) 복사본을 반환합니다. 반환된 개체를 변경해도 데이터 레이어는 변경되지 않습니다. 계산된 상태를 변경하려면 항상 변경 사항을 푸시합니다.