Getting started with the React Timeline component
16 Jul 20269 minutes to read
This section explains how to create and configure a simple Timeline in a React application using Syncfusion Essential JS 2.
Dependencies
The following list of dependencies is required to use the Timeline component in the application.
|-- @syncfusion/ej2-react-layouts
|-- @syncfusion/ej2-base
|-- @syncfusion/ej2-layouts
|-- @syncfusion/ej2-react-baseInstallation and Configuration
To quickly set up a React application, use create-vite-app, which provides a faster development environment, smaller bundle sizes, and optimized builds compared to traditional tools like create-react-app. For detailed steps, refer to the Vite installation instructions. Vite configures the development environment using modern tooling and optimizes the application for production.
Note: To create a React application using
create-react-app, refer to this documentation for more details.
To create a new React application, run the following command.
npm create vite@latest my-appTo set up a React application in a TypeScript environment, run the following command.
npm create vite@latest my-app -- --template react-ts
cd my-app
npm run devTo set up a React application in a JavaScript environment, run the following command.
npm create vite@latest my-app -- --template react
cd my-app
npm run devAdding Syncfusion® packages
All the available Essential® JS 2 packages are published in npmjs.com public registry.
To install the Timeline component, use the following command:
npm install @syncfusion/ej2-react-layouts --saveAdding CSS Reference
Import the required CSS references for the Timeline component in src/App.css as shown below.
@import "../node_modules/@syncfusion/ej2-base/styles/tailwind3.css";
@import "../node_modules/@syncfusion/ej2-layouts/styles/tailwind3.css";Adding the Timeline Component to the Application
To include the Timeline component in your application, import the TimelineComponent from the ej2-react-layouts package into the App.tsx file.
Each Timeline item is defined using the ItemDirective, which must be placed inside the ItemsDirective. The ItemsDirective acts as a container for managing multiple Timeline items, and each ItemDirective represents an individual entry in the Timeline.
import { TimelineComponent, ItemsDirective, ItemDirective } from '@syncfusion/ej2-react-layouts';
import * as React from "react";
import * as ReactDOM from 'react-dom/client';
import "./App.css";
function App() {
return (
<div id="timeline" style={{ height: "350px" }}>
<TimelineComponent>
<ItemsDirective>
<ItemDirective />
<ItemDirective />
<ItemDirective />
<ItemDirective />
</ItemsDirective>
</TimelineComponent>
</div>
);
}
export default App;
const root = ReactDOM.createRoot(
document.getElementById('element')
);
root.render(<App />);Running the application
Run the npm run dev command in the console to start the development server. This command compiles the application and serves it locally, making it available in the browser.
npm run dev
The following example renders a basic Timeline with four default items.
import * as React from "react";
import * as ReactDOM from 'react-dom/client';
import { TimelineComponent, ItemsDirective, ItemDirective } from '@syncfusion/ej2-react-layouts';
function App() {
const orderStatus = [
'Ordered \n 9:15 AM, January 1, 2024',
'Shipped \n 12:20 PM, January 4, 2024',
'Out for delivery \n 07:00 AM, January 8, 2024',
'Delivered \n Estimated delivery by 09:20 AM'
];
return (
<div id="timeline">
<TimelineComponent>
<ItemsDirective>
<ItemDirective content={orderStatus[0]} dotCss='state-success' cssClass='completed'/>
<ItemDirective content={orderStatus[1]} dotCss='state-success' cssClass='completed'/>
<ItemDirective content={orderStatus[2]} dotCss='state-progress' cssClass='intermediate'/>
<ItemDirective content={orderStatus[3]}/>
</ItemsDirective>
</TimelineComponent>
</div>
);
}
export default App;
const root = ReactDOM.createRoot(
document.getElementById('element')
);
root.render(<App />);import * as React from "react";
import * as ReactDOM from 'react-dom/client';
import { TimelineComponent, ItemsDirective, ItemDirective } from '@syncfusion/ej2-react-layouts';
function App() {
const orderStatus = [
'Ordered \n 9:15 AM, January 1, 2024',
'Shipped \n 12:20 PM, January 4, 2024',
'Out for delivery \n 07:00 AM, January 8, 2024',
'Delivered \n Estimated delivery by 09:20 AM'
];
return (
<div id="timeline">
<TimelineComponent>
<ItemsDirective>
<ItemDirective content={orderStatus[0]} dotCss='state-success' cssClass='completed' />
<ItemDirective content={orderStatus[1]} dotCss='state-success' cssClass='completed' />
<ItemDirective content={orderStatus[2]} dotCss='state-progress' cssClass='intermediate' />
<ItemDirective content={orderStatus[3]} />
</ItemsDirective>
</TimelineComponent>
</div>
);
}
export default App;
const root = ReactDOM.createRoot(
document.getElementById('element')
);
root.render(<App />);/* Represents the styles for loader */
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
#timeline {
height: 330px;
}<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion EJ2 React Timeline Sample</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.1.29/ej2-layouts/styles/tailwind3.css" rel="stylesheet" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
</head>
<body>
<div id='element' style="margin-top: 30px;">
<div id='loader'>Loading....</div>
</div>
</body>
</html>