React MUI TypeScript refers to using the MUI Module in React written in the Typescript. MUI provides UI components that are easy to use in React TypeScript.
Prerequisites:
Material-UI is a React UI framework based on Google's Material Design system that provides pre-built components and styling for building modern and intuitive web applications. It has a large and active community of contributors and a theme customization system for easy branding and design customization.
Modules required:
- react
- node
- @emotion/reactÂ
- @emotion/styled
- @material-ui/coreÂ
- @mui/icons-materialÂ
- @mui/material
Steps to Create React Application and Install Modules:
Step 1: Create a React app using the following command.
npx create-react-app react-mui-typescript --template typescript
Step 2: Now get into the project directory
cd react-mui-typescript
Step 3: Installing dependencies using the following command.
npm i @emotion/react @emotion/styled @material-ui/core @mui/icons-material @mui/material
Project Structure:
.png)
The updated dependencies in package.json file will look like.
"dependencies": {
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@material-ui/core": "^4.12.4",
"@mui/icons-material": "^5.14.16",
"@mui/material": "^5.14.17",
"@testing-library/jest-dom": "^5.17.0",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
"@types/jest": "^27.5.2",
"@types/node": "^16.18.61",
"@types/react": "^18.2.37",
"@types/react-dom": "^18.2.15",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-scripts": "5.0.1",
"typescript": "^4.9.5",
"web-vitals": "^2.1.4"
}
Example 1: Here, in order to learn about the usage of MUI in React we will take an example of a text field and onChange event changing values in the page.
JavaScript
// Filename - App.tsx
import React from 'react';
// Import the LoginForm component
import LoginForm from './components/LoginForm';
// Define a function to handle the
// submission of the LoginForm
function handleLogin(
username: string,
password: string
) {
console.log(username, password);
}
// Define the App component
function App() {
return (
// Render a div that contains the
// LoginForm component
<div>
{/* Render an H1 element with
the text "Login Form" */}
<h1 style={{ textAlign: 'center' }}>
Login Form
</h1>
{/* Render the LoginForm component */}
<LoginForm onSubmit={handleLogin} />
</div>
);
}
// Export the App component
export default App;
JavaScript
// Filename - LoginForm.tsx
import React, { useState } from 'react';
import { makeStyles } from '@material-ui/core/styles';
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button';
// Define CSS styles using the makeStyles
// function provided by Material-UI
const useStyles = makeStyles({
form: {
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
},
input: {
marginBottom: '1rem',
},
button: {
marginTop: '1rem',
},
});
// Define the type for the props passed
// to the LoginForm component
interface LoginFormProps {
onSubmit: (
username: string,
password: string
) => void;
}
// Define the LoginForm component using
// the functional component syntax
export default function LoginForm(props: LoginFormProps) {
// Use the styles defined earlier
const classes = useStyles();
// Define state variables for the
// username and password input fields
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
// Define a function to handle form submission
const handleSubmit =
(event: React.FormEvent<HTMLFormElement>) => {
// Prevent the default form submission behavior
event.preventDefault();
// Call the onSubmit prop
props.onSubmit(username, password);
};
// Render the login form using Material-UI components
return (
<form className={classes.form} onSubmit={handleSubmit}>
<TextField
className={classes.input}
label="Username"
variant="outlined"
value={username}
// Update the value of the username state
// variable when the input field changes
onChange={(event) => setUsername(event.target.value)}
/>
<TextField
className={classes.input}
label="Password"
type="password"
variant="outlined"
value={password}
// Update the value of the password state variable
// when the input field changes
onChange={(event) => setPassword(event.target.value)}
/>
<Button
className={classes.button}
variant="contained"
color="primary"
type="submit"
>
Login
</Button>
</form>
);
}
Steps to run the application: Use this command in the terminal inside the project directory.
npm start
Output: This output will be visible on http://localhost:3000/
.png)
Example 2: This example implements ClickCounter App with TypeScript similar to the above project.
JavaScript
// Filename - App.tsx
import ClickCounter from './components/ClickCounter';
function App() {
return (
<ClickCounter />
);
}
export default App;
JavaScript
// Filename - components/ClickCounter.tsx
import React, { useState } from 'react';
// Importing MUI components Button and Typography
import Button from '@mui/material/Button';
import Typography from '@mui/material/Typography';
// Defining a functional component called
// ClickCounter
const ClickCounter: React.FC = () => {
// Initializing the count state to 0
// using the useState hook
const [count, setCount] = useState(0);
// Defining a function that updates the count
// state when button is clicked
const handleButtonClick = () => {
setCount(count + 1);
};
// Return JSX elements that render the
// click counter UI
return (
<>
<Typography variant="h4" gutterBottom>
Click Counter
</Typography>
<Typography variant="body1" gutterBottom>
You have clicked the button {count} times.
</Typography>
<Button variant="contained"
onClick={handleButtonClick}>
Click me!
</Button>
</>
);
};
// Exporting ClickCounter component
export default ClickCounter;
Steps to run the application: Use this command in the terminal inside the project directory.
npm start
Output: This output will be visible on http://localhost:3000/
Similar Reads
Next.js TypeScript NextJS is a powerful and popular JavaScript framework that is used for building server-rendered React applications. . It provides a development environment with built-in support for TypeScript, as well as a set of features that make it easy to build and deploy web applications. It was developed by Z
4 min read
TypeScript Tutorial TypeScript is a superset of JavaScript that adds extra features like static typing, interfaces, enums, and more. Essentially, TypeScript is JavaScript with additional syntax for defining types, making it a powerful tool for building scalable and maintainable applications.Static typing allows you to
8 min read
NPM Typescript Node Package Manager (npm) is a package manager for NodeJS and JavaScript, which is mainly used for installing, managing, and sharing reusable code packages. TypeScript, on the other hand, is a powerful superset of JavaScript that introduces static typing, enabling developers to write more robust an
5 min read
React MUI Theming Material-UI is a user interface library that provides predefined and customizable React components for faster and easy web development. These Material-UI components are based on top of Material Design by Google. In this article let's discuss the Theming in the Material-UI library. The Theming in Rea
3 min read
How to use TypeScript with React? TypeScript enhances JavaScript by adding strict type definitions, making your code more robust and maintainable. ReactJS, a popular library for building user interfaces, pairs excellently with TypeScript to create clean, efficient, and scalable codebases. Combining TypeScript with React offers a pow
3 min read