Events in React Sankey Chart component
18 Nov 201824 minutes to read
The Sankey Chart provides comprehensive events that allow you to customize behavior, respond to user interactions, and hook into the chart lifecycle. These events enable advanced customization scenarios including data transformation, analytics tracking, and dynamic UI updates.
This guide covers lifecycle events, rendering events, interaction events, and export/print events.
Event List
| Event | Description |
|---|---|
| load | Triggers before the Sankey loads. Allows customization before rendering. |
| loaded | Triggers after the Sankey is fully loaded and rendered. |
| legendItemRendering | Triggers before a legend item is rendered. Allows customization of legend items. |
| labelRendering | Triggers before a label is rendered. Allows customization of label text and style. |
| nodeRendering | Triggers before a node is rendered. Allows customization of node appearance. |
| linkRendering | Triggers before a link is rendered. Allows customization of link appearance. |
| tooltipRendering | Triggers before a tooltip is rendered. Allows customization of tooltip content. |
| nodeClick | Triggers when a node is clicked. |
| nodeEnter | Triggers when the mouse enters a node area. |
| nodeLeave | Triggers when the mouse leaves a node area. |
| linkClick | Triggers when a link is clicked. |
| linkEnter | Triggers when the mouse enters a link area. |
| linkLeave | Triggers when the mouse leaves a link area. |
| sizeChanged | Triggers when the chart size changes. |
| beforeExport | Triggers before the export process starts. |
| afterExport | Triggers after the export process completes. |
| exportCompleted | Triggers when export is completed. |
| beforePrint | Triggers before the print process starts. |
Lifecycle Events
Load Event
The load event triggers before the Sankey Chart begins rendering. Use this event to customize configuration, apply themes, or prepare data before the chart loads:
import * as React from "react";
import * as ReactDOM from "react-dom";
import { SankeyComponent, SankeyNodeDirective, SankeyNodesCollectionDirective, SankeyLinkDirective, SankeyLinksCollectionDirective, Inject, SankeyTooltip, SankeyLegend, SankeyExport } from '@syncfusion/ej2-react-charts';
function App() {
const onLoad = (args) => {
console.log('Sankey chart is loading...', args);
};
return (
<div className="control-pane">
<div className="control-section" id="sankey-container">
<SankeyComponent
width="90%"
height="450px"
load={onLoad}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id='Agricultural Waste' />
<SankeyNodeDirective id='Bio-conversion' />
<SankeyNodeDirective id='Liquid Biofuel' />
<SankeyNodeDirective id='Electricity' />
<SankeyNodeDirective id='Heat' />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId='Agricultural Waste' targetId='Bio-conversion' value={124.729} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Liquid Biofuel' value={0.597} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Electricity' value={26.862} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Heat' value={280.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend, SankeyExport]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import { SankeyComponent, SankeyNodeDirective, SankeyNodesCollectionDirective, SankeyLinkDirective, SankeyLinksCollectionDirective, Inject, SankeyTooltip, SankeyLegend, SankeyExport } from '@syncfusion/ej2-react-charts';
import { ILoadedEventArgs } from '@syncfusion/ej2-react-charts';
function App() {
const onLoad = (args: ILoadedEventArgs) => {
console.log('Sankey chart is loading...', args);
};
return (
<div className="control-pane">
<div className="control-section" id="sankey-container">
<SankeyComponent
width="90%"
height="450px"
load={onLoad}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id='Agricultural Waste' />
<SankeyNodeDirective id='Bio-conversion' />
<SankeyNodeDirective id='Liquid Biofuel' />
<SankeyNodeDirective id='Electricity' />
<SankeyNodeDirective id='Heat' />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId='Agricultural Waste' targetId='Bio-conversion' value={124.729} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Liquid Biofuel' value={0.597} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Electricity' value={26.862} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Heat' value={280.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend, SankeyExport]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Loaded Event
The loaded event triggers after the Sankey Chart is completely rendered and ready for interaction. Use this event to initialize calculations, perform analytics, or trigger dependent components:
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
function App() {
const onLoaded = (args) => {
console.log('Sankey chart has loaded successfully', args);
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
loaded={onLoaded}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
import { SankeyNodeModel, SankeyLinkModel, ILoadedEventArgs } from '@syncfusion/ej2-react-charts';
function App() {
const onLoaded = (args: ILoadedEventArgs) => {
console.log('Sankey chart has loaded successfully', args);
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
loaded={onLoaded}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Interaction Events
Node Interaction Events
Handle node click and hover events to respond to user actions and provide interactive feedback:
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
function App() {
const onNodeMouseClick = (args) => {
console.log('Node clicked:', args.node);
};
const onNodeMouseEnter = (args) => {
console.log('Node hovered:', args.node);
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
nodeClick={onNodeMouseClick}
nodeEnter={onNodeMouseEnter}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective,
SankeyNodeEventArgs
} from '@syncfusion/ej2-react-charts';
function App() {
const onNodeMouseClick = (args: SankeyNodeEventArgs) => {
console.log('Node clicked:', args.node);
};
const onNodeMouseEnter = (args: SankeyNodeEventArgs) => {
console.log('Node hovered:', args.node);
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
nodeClick={onNodeMouseClick}
nodeEnter={onNodeMouseEnter}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Link Interaction Events
Handle link click and hover events:
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective,
} from '@syncfusion/ej2-react-charts';
function App() {
const onLinkMouseClick = (args) => {
console.log('Link clicked:', args.link);
};
const onLinkMouseEnter = (args) => {
console.log('Link hovered:', args.link);
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
linkClick={onLinkMouseClick}
linkEnter={onLinkMouseEnter}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective,
SankeyLinkEventArgs
} from '@syncfusion/ej2-react-charts';
function App() {
const onLinkMouseClick = (args: SankeyLinkEventArgs) => {
console.log('Link clicked:', args.link);
};
const onLinkMouseEnter = (args: SankeyLinkEventArgs) => {
console.log('Link hovered:', args.link);
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
linkClick={onLinkMouseClick}
linkEnter={onLinkMouseEnter}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Rendering Events
Use rendering events to customize elements dynamically based on data values, conditions, or business logic. This is the most powerful approach for data-driven styling.
Node Rendering Event
The nodeRendering event triggers before each node is rendered, allowing dynamic node customization:
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
function App() {
const onNodeRendering = (args) => {
// Customize node appearance during rendering
if (args.node.id === 'Agricultural Waste') {
args.node.color = '#FF6B6B'
} else if (args.node.id === 'Bio-conversion') {
args.node.color = '#4ECDC4'
}
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
nodeRendering={onNodeRendering}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
import { SankeyNodeModel, SankeyLinkModel, SankeyNodeEventArgs } from '@syncfusion/ej2-react-charts';
function App() {
const onNodeRendering = (args: SankeyNodeEventArgs) => {
// Customize node appearance during rendering
if (args.node.id === 'Agricultural Waste') {
args.node.color = '#FF6B6B'
} else if (args.node.id === 'Bio-conversion') {
args.node.color = '#4ECDC4'
}
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
nodeRendering={onNodeRendering}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Link Rendering Event
The linkRendering event triggers before each link is rendered, allowing dynamic link customization:
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyExport,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
function App() { const onLinkRendering = (args) => {
// Customize link appearance during rendering
if (args.link.value > 50) {
args.fill = '#FF6B6B'
} else {
args.fill = '#70AD47'
}
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
linkRendering={onLinkRendering}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend, SankeyExport]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent, Inject,
SankeyTooltip,
SankeyLegend,
SankeyExport,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective,
SankeyLinkRenderEventArgs
} from '@syncfusion/ej2-react-charts';
function App() {
const onLinkRendering = (args: SankeyLinkRenderEventArgs) => {
// Customize link appearance during rendering
if (args.link.value > 50) {
args.fill = '#FF6B6B'
} else {
args.fill = '#70AD47'
}
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
linkRendering={onLinkRendering}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend, SankeyExport]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Label Rendering Event
The labelRendering event triggers before each label is rendered, allowing dynamic label customization:
import * as React from "react";
import * as ReactDOM from "react-dom";
import { SankeyComponent, SankeyNodeDirective, SankeyNodesCollectionDirective, SankeyLinkDirective, SankeyLinksCollectionDirective, Inject, SankeyTooltip, SankeyLegend, SankeyExport } from '@syncfusion/ej2-react-charts';
function App() {
const onLabelRendering = (args) => {
// Customize label appearance during rendering
args.labelStyle = {
fontFamily: 'Arial',
fontStyle: 'normal',
fontWeight: 'bold',
fontSize: '12px',
color: '#000'
};
};
return (
<div className="control-pane">
<div className="control-section" id="sankey-container">
<SankeyComponent
width="90%"
height="450px"
labelRendering={onLabelRendering}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id='Agricultural Waste' />
<SankeyNodeDirective id='Bio-conversion' />
<SankeyNodeDirective id='Liquid Biofuel' />
<SankeyNodeDirective id='Electricity' />
<SankeyNodeDirective id='Heat' />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId='Agricultural Waste' targetId='Bio-conversion' value={124.729} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Liquid Biofuel' value={0.597} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Electricity' value={26.862} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Heat' value={280.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend, SankeyExport]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import { SankeyComponent, SankeyNodeDirective, SankeyNodesCollectionDirective, SankeyLinkDirective, SankeyLinksCollectionDirective, Inject, SankeyTooltip, SankeyLegend, SankeyExport, SankeyLabelRenderEventArgs } from '@syncfusion/ej2-react-charts';
function App() {
const onLabelRendering = (args: SankeyLabelRenderEventArgs) => {
// Customize label appearance during rendering
args.labelStyle = {
fontFamily: 'Arial',
fontStyle: 'normal',
fontWeight: 'bold',
fontSize: '12px',
color: '#000'
};
};
return (
<div className="control-pane">
<div className="control-section" id="sankey-container">
<SankeyComponent
width="90%"
height="450px"
labelRendering={onLabelRendering}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id='Agricultural Waste' />
<SankeyNodeDirective id='Bio-conversion' />
<SankeyNodeDirective id='Liquid Biofuel' />
<SankeyNodeDirective id='Electricity' />
<SankeyNodeDirective id='Heat' />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId='Agricultural Waste' targetId='Bio-conversion' value={124.729} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Liquid Biofuel' value={0.597} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Electricity' value={26.862} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Heat' value={280.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend, SankeyExport]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Legend Item Rendering Event
The legendItemRendering event triggers before a legend item is rendered, allowing custom legend item styling:
import * as React from "react";
import * as ReactDOM from "react-dom";
import { SankeyComponent, SankeyNodeDirective, SankeyNodesCollectionDirective, SankeyLinkDirective, SankeyLinksCollectionDirective, Inject, SankeyTooltip, SankeyLegend, SankeyExport } from '@syncfusion/ej2-react-charts';
function App() {
const onLegendItemRendering = (args) => {
// Customize legend item appearance and text
args.text = args.text.toUpperCase();
args.fill = '#333';
};
return (
<div className="control-pane">
<div className="control-section" id="sankey-container">
<SankeyComponent
width="90%"
height="450px"
legendSettings={{
visible: true,
position: 'Bottom'
}}
legendItemRendering={onLegendItemRendering}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id='Agricultural Waste' />
<SankeyNodeDirective id='Bio-conversion' />
<SankeyNodeDirective id='Liquid Biofuel' />
<SankeyNodeDirective id='Electricity' />
<SankeyNodeDirective id='Heat' />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId='Agricultural Waste' targetId='Bio-conversion' value={124.729} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Liquid Biofuel' value={0.597} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Electricity' value={26.862} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Heat' value={280.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend, SankeyExport]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import { SankeyComponent, SankeyNodeDirective, SankeyNodesCollectionDirective, SankeyLinkDirective, SankeyLinksCollectionDirective, Inject, SankeyTooltip, SankeyLegend, SankeyExport, SankeyLegendRenderEventArgs } from '@syncfusion/ej2-react-charts';
function App() {
const onLegendItemRendering = (args: SankeyLegendRenderEventArgs) => {
// Customize legend item appearance and text
args.text = args.text.toUpperCase();
args.fill = '#333'
};
return (
<div className="control-pane">
<div className="control-section" id="sankey-container">
<SankeyComponent
width="90%"
height="450px"
legendSettings={{
visible: true,
position: 'Bottom'
}}
legendItemRendering={onLegendItemRendering}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id='Agricultural Waste' />
<SankeyNodeDirective id='Bio-conversion' />
<SankeyNodeDirective id='Liquid Biofuel' />
<SankeyNodeDirective id='Electricity' />
<SankeyNodeDirective id='Heat' />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId='Agricultural Waste' targetId='Bio-conversion' value={124.729} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Liquid Biofuel' value={0.597} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Electricity' value={26.862} />
<SankeyLinkDirective sourceId='Bio-conversion' targetId='Heat' value={280.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend, SankeyExport]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Size Changed Event
Respond when the chart size changes (e.g., window resize):
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
function App() {
const onSizeChanged = (args) => {
console.log('Chart size changed:', { width: args.currentSize.width, height: args.currentSize.height });
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
sizeChanged={onSizeChanged}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective,
SankeySizeChangedEventArgs
} from '@syncfusion/ej2-react-charts';
function App() {
const onSizeChanged = (args: SankeySizeChangedEventArgs) => {
console.log('Chart size changed:', { width: args.currentSize.width, height: args.currentSize.height });
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
sizeChanged={onSizeChanged}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));Complete Event Handler Example
Combine multiple events for comprehensive handling:
import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
function App() {
const onLoadComplete = (args) => {
console.log('Sankey chart rendering complete', args);
const element = document.getElementById('sankey-container');
if (element) element.setAttribute('title', 'Sankey Chart Ready');
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
loaded={onLoadComplete}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));import * as React from "react";
import * as ReactDOM from "react-dom";
import {
SankeyComponent,
Inject,
SankeyTooltip,
SankeyLegend,
SankeyNodeDirective,
SankeyNodesCollectionDirective,
SankeyLinkDirective,
SankeyLinksCollectionDirective
} from '@syncfusion/ej2-react-charts';
import { SankeyNodeModel, SankeyLinkModel, ILoadedEventArgs } from '@syncfusion/ej2-react-charts';
function App() {
const onLoadComplete = (args: ILoadedEventArgs) => {
console.log('Sankey chart rendering complete', args);
const element = document.getElementById('sankey-container');
if (element) element.setAttribute('title', 'Sankey Chart Ready');
};
return (
<div className="control-pane">
<div className="control-section">
<SankeyComponent
id="sankey-container"
width="90%"
height="450px"
loaded={onLoadComplete}
>
<SankeyNodesCollectionDirective>
<SankeyNodeDirective id="Agricultural Waste" />
<SankeyNodeDirective id="Biomass Residues" />
<SankeyNodeDirective id="Bio-conversion" />
<SankeyNodeDirective id="Liquid Biofuel" />
<SankeyNodeDirective id="Electricity" />
<SankeyNodeDirective id="Heat" />
</SankeyNodesCollectionDirective>
<SankeyLinksCollectionDirective>
<SankeyLinkDirective sourceId="Agricultural Waste" targetId="Bio-conversion" value={84.152} />
<SankeyLinkDirective sourceId="Biomass Residues" targetId="Bio-conversion" value={24.152} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Liquid Biofuel" value={10.597} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Electricity" value={36.862} />
<SankeyLinkDirective sourceId="Bio-conversion" targetId="Heat" value={60.845} />
</SankeyLinksCollectionDirective>
<Inject services={[SankeyTooltip, SankeyLegend]} />
</SankeyComponent>
</div>
</div>
);
}
export default App;
ReactDOM.render(<App />, document.getElementById('sankey'));