Hello folks! welcome back to a new section of our tutorial on ReactJS. In this section of our tutorial on ReactJS, we will be studying about ReactJS Material UI.
React gives a large collection of advanced UI component framework. Material UI is one of the popular React UI frameworks. We will learn about how to use material UI library in this tutorial.
React gives a large collection of advanced UI component framework. Material UI is one of the popular React UI frameworks. We will learn about how to use material UI library in this tutorial.
Installation
Material UI can be installed making use of npm package.
npm install @material-ui/core
Material UI recommends roboto font for UI. To use Roboto font, include it using Google API links.
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
To use font icons, use icon link from Google APIs -
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
To use SVG icons, install @material-ui/icons package -
npm install @material-ui/icons
Working Example
Let's create the expense list application and use material UI components instead of html tables.
First, create a new React application, react-materialui-app using the Create React App or Rollup bundler by following the guidelines in Creating a React application tutorial.
Next, install React Transaction Group library -
First, create a new React application, react-materialui-app using the Create React App or Rollup bundler by following the guidelines in Creating a React application tutorial.
Next, install React Transaction Group library -
cd /go/to/project npm install @material-ui/core @material-ui/icons --save
READ: ReactJS | Pagination
Next, open the application in your favorite editor.
Next, create an src folder beneath the root directory of the application.
Next, create component folder beneath src folder.
Next, create a file, EnpenseEntryItemList.js in the src/components folder to create the ExpenseEntryItemList component.
Next, import React library and the stylesheet -
Next, create an src folder beneath the root directory of the application.
Next, create component folder beneath src folder.
Next, create a file, EnpenseEntryItemList.js in the src/components folder to create the ExpenseEntryItemList component.
Next, import React library and the stylesheet -
import React from 'react';
Next, import Material-UI library -
import { withStyles } from '@material-ui/core/styles'; import Table from '@material-ui/core/Table'; import TableBody from '@material-ui/core/TableBody'; import TableCell from '@material-ui/core/TableCell'; import TableContainer from '@material-ui/core/TableContainer'; import TableHead from '@material-ui/core/TableHead'; import TableRow from '@material-ui/core/TableRow'; import Paper from '@material-ui/core/Paper';
Next, create ExpenseEntryItemList class and call constructor function.
class ExpenseEntryItemList extends React.Component { constructor(props) { super(props); } } <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
Next, create a render function.
render() { }
Next, apply styles for table rows and cells in the render method.
const StyledTableCell = withStyles((theme) => ({ head: { backgroundColor: theme.palette.common.black, color: theme.palette.common.white, }, body: { fontSize: 14, }, }))(TableCell); const StyledTableRow = withStyles((theme) => ({ root: { '&:nth-of-type(odd)': { backgroundColor: theme.palette.action.hover, }, }, }))(TableRow);
Use map method to create a collection of Material UI StyledTableRow with each Row representing a single expense entry item in the list.
const lists = this.props.items.map((item) => <StyledTableRow key={item.id}> <StyledTableCell component="th" scope="row"> {item.name} </StyledTableCell> <StyledTableCell align="right">{item.amount}</StyledTableCell> <StyledTableCell align="right"> {new Date(item.spendDate).toDateString()} </StyledTableCell> <StyledTableCell align="right">{item.category}</StyledTableCell> </StyledTableRow> );
Here, key identifies each row and it has to be unique among the list.
In the render() method, create a Material UI table and include the lists expression in the rows section and return it.
In the render() method, create a Material UI table and include the lists expression in the rows section and return it.
return ( <TableContainer component={Paper}> <Table aria-label="customized table"> <TableHead> <TableRow> <StyledTableCell>Title</StyledTableCell> <StyledTableCell align="right">Amount</StyledTableCell> <StyledTableCell align="right">Spend date</StyledTableCell> <StyledTableCell align="right">Category</StyledTableCell> </TableRow> </TableHead> <TableBody> {lists} </TableBody> </Table> </TableContainer> );
Finally, export the component.
export default ExpenseEntryItemList;
We've successfully created the component to render the expense items using material UI components.
The complete code of the component is as follows -
The complete code of the component is as follows -
import React from 'react'; import { withStyles } from '@material-ui/core/styles'; import Table from '@material-ui/core/Table'; import TableBody from '@material-ui/core/TableBody'; import TableCell from '@material-ui/core/TableCell'; import TableContainer from '@material-ui/core/TableContainer'; import TableHead from '@material-ui/core/TableHead'; import TableRow from '@material-ui/core/TableRow'; import Paper from '@material-ui/core/Paper'; class ExpenseEntryItemList extends React.Component { constructor(props) { super(props); } render() { const StyledTableCell = withStyles((theme) => ({ head: { backgroundColor: theme.palette.common.black, color: theme.palette.common.white, }, body: { fontSize: 14, }, }))(TableCell); const StyledTableRow = withStyles((theme) => ({ root: { '&:nth-of-type(odd)': { backgroundColor: theme.palette.action.hover, }, }, }))(TableRow); const lists = this.props.items.map((item) => <StyledTableRow key={item.id}> <StyledTableCell component="th" scope="row"> {item.name} </StyledTableCell> <StyledTableCell align="right">{item.amount}</StyledTableCell> <StyledTableCell align="right">{new Date(item.spendDate).toDateString()}</StyledTableCell> <StyledTableCell align="right">{item.category}</StyledTableCell> </StyledTableRow> ); return ( <TableContainer component={Paper}> <Table aria-label="customized table"> <TableHead> <TableRow> <StyledTableCell>Title</StyledTableCell> <StyledTableCell align="right">Amount</StyledTableCell> <StyledTableCell align="right">Spend date</StyledTableCell> <StyledTableCell align="right">Category</StyledTableCell> </TableRow> </TableHead> <TableBody> {lists} </TableBody> </Table> </TableContainer> ); } } export default ExpenseEntryItemList;
Next, open index.js and import React library and our newly created ExpenseEntryItemList component.
import React from 'react'; import ReactDOM from 'react-dom'; import ExpenseEntryItemList from './components/ExpenseEntryItemList';
Next, declare a list (of expense entry items) and populate it with some random values in index.js file.
const items = [ { id: 1, name: "Pizza", amount: 80, spendDate: "2020-10-10", category: "Food" }, { id: 1, name: "Grape Juice", amount: 30, spendDate: "2020-10-12", category: "Food" }, { id: 1, name: "Cinema", amount: 210, spendDate: "2020-10-16", category: "Entertainment" }, { id: 1, name: "Java Programming book", amount: 242, spendDate: "2020-10-15", category: "Academic" }, { id: 1, name: "Mango Juice", amount: 35, spendDate: "2020-10-16", category: "Food" }, { id: 1, name: "Dress", amount: 2000, spendDate: "2020-10-25", category: "Cloth" }, { id: 1, name: "Tour", amount: 2555, spendDate: "2020-10-29", category: "Entertainment" }, { id: 1, name: "Meals", amount: 300, spendDate: "2020-10-30", category: "Food" }, { id: 1, name: "Mobile", amount: 3500, spendDate: "2020-11-02", category: "Gadgets" }, { id: 1, name: "Exam Fees", amount: 1245, spendDate: "2020-11-04", category: "Academic" } ]
Next, use ExpenseEntryItemList component by passing the items via items attributes.
ReactDOM.render( <React.StrictMode> <ExpenseEntryItemList items={items} /> </React.StrictMode>, document.getElementById('root') );
The complete code of index.js is as follows -
import React from 'react'; import ReactDOM from 'react-dom'; import ExpenseEntryItemList from './components/ExpenseEntryItemList'; const items = [ { id: 1, name: "Pizza", amount: 80, spendDate: "2020-10-10", category: "Food" }, { id: 1, name: "Grape Juice", amount: 30, spendDate: "2020-10-12", category: "Food" }, { id: 1, name: "Cinema", amount: 210, spendDate: "2020-10-16", category: "Entertainment" }, { id: 1, name: "Java Programming book", amount: 242, spendDate: "2020-10-15", category: "Academic" }, { id: 1, name: "Mango Juice", amount: 35, spendDate: "2020-10-16", category: "Food" }, { id: 1, name: "Dress", amount: 2000, spendDate: "2020-10-25", category: "Cloth" }, { id: 1, name: "Tour", amount: 2555, spendDate: "2020-10-29", category: "Entertainment" }, { id: 1, name: "Meals", amount: 300, spendDate: "2020-10-30", category: "Food" }, { id: 1, name: "Mobile", amount: 3500, spendDate: "2020-11-02", category: "Gadgets" }, { id: 1, name: "Exam Fees", amount: 1245, spendDate: "2020-11-04", category: "Academic" } ] ReactDOM.render( <React.StrictMode> <ExpenseEntryItemList items={items} /> </React.StrictMode>, document.getElementById('root') );
Next, serve the application making use of npm command.
npm start
Next, open the index.html file in the public folder and include the material UI font and icons.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Material UI App</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" /> <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" /> </head> <body> <div id="root"></div> <script type="text/JavaScript" src="./index.js"></script> </body> </html>
Next, open the web browser and then enter http://localhost:3000 in the address bar and press enter.
Alright guys! This is where we are going to be rounding up for this tutorial. In our next tutorial, we are going to be studying about Http Client Programming in React.
Feel free to ask your questions where necessary and we will attend to them as soon as possible. If this tutorial was helpful to you, you can use the share button to share this tutorial.
Follow us on our various social media platforms to stay updated with our latest tutorials. You can also subscribe to our newsletter in order to get our tutorials delivered directly to your emails.
Thanks for reading and bye for now.
Feel free to ask your questions where necessary and we will attend to them as soon as possible. If this tutorial was helpful to you, you can use the share button to share this tutorial.
Follow us on our various social media platforms to stay updated with our latest tutorials. You can also subscribe to our newsletter in order to get our tutorials delivered directly to your emails.
Thanks for reading and bye for now.