Skip to main content
Version: 1.0.0

Lifecycle events

What are lifecycle hooks?

Muze exposes a set of lifecycle events. All these events take in a callback function which is then invoked based on the lifecycle event. This allows the user to add custom effects at a certain stage in the chart creation.

Canvas layout

beforeLayout: Fired before the layout is calculated for a component.

canvas.once("beforeLayout", () => {
// Perform custom operation
console.log("Canvas before layout");
});

afterLayout: Fired after the layout is calculated for a component.

canvas.once("afterLayout", () => {
// Perform custom operation
console.log("Canvas after layout");
});

Drawing complete

beforeRendered: Fired before a component is rendered.

canvas.once("beforeRendered", () => {
// Perform custom operation
console.log("Canvas before render");
});

afterRendered: Fired after chart has been drawn (before animation and side-effects).

canvas.once("afterRendered", () => {
// Perform custom operation
console.log("Canvas after render");
});

Animation end

animationEnd: Fired after chart is rendered and animation done.

canvas.once("animationEnd", () => {
// Perform custom operation
console.log("Animation end");
});

Canvas dispose

beforeDisposed: Fired before a component is destroyed.

canvas.once("beforeDisposed", () => {
// Perform custom operation
console.log("Canvas before dispose");
});

afterDisposed: Fired after a component is destroyed.

canvas.once("afterDisposed", () => {
// Perform custom operation
console.log("Canvas after dispose");
});

Example

Below, we add a red border on the chart on animationEnd (notice it appears just after animation completes).

const { muze, getDataFromSearchQuery } = viz;

const data = getDataFromSearchQuery();

muze
.canvas()
.rows(["Acceleration"])
.columns(["Origin"])
.config({
border: {
showValueBorders: {
left: true,
bottom: true,
},
},
})
.data(data)
.width(700)
.height(700)
.mount("#chart");

canvas.once("beforeLayout", () => {
// Add red border on canvas before layout
setTimeout(() => {
canvas.config({
border: {
style: "solid",
color: "red",
width: 2,
},
});
}, 1000);
});

canvas.once("afterLayout", () => {
// Add green border on canvas after layout
setTimeout(() => {
canvas.config({
border: {
style: "solid",
color: "green",
width: 2,
},
});
}, 2000);
});

canvas.once("beforeRendered", () => {
// Add purple border on canvas before render
setTimeout(() => {
canvas.config({
border: {
style: "solid",
color: "purple",
width: 2,
},
});
}, 3000);
});

canvas.once("afterRendered", () => {
// Add orange border on canvas after render
setTimeout(() => {
canvas.config({
border: {
style: "solid",
color: "orange",
width: 2,
},
});
}, 4000);
});

canvas.once("animationEnd", () => {
// Add blue border on canvas animation done
setTimeout(() => {
canvas.config({
border: {
style: "solid",
color: "blue",
width: 2,
},
});

setTimeout(() => {
canvas.dispose();
}, 1000);
}, 5000);
});

canvas.once("beforeDisposed", () => {
// Add black border on canvas before dispose
setTimeout(() => {
canvas.config({
border: {
style: "solid",
color: "black",
width: 2,
},
});
}, 6000);
});

canvas.once("afterDisposed", () => {
const chart = document.getElementById("chart");

const div = document.createElement("div");
div.innerHTML = "Canvas disposed";
chart.appendChild(div);
});