ReactJS App And Bootstrap
In the era of the increasing popularity of single-page applications and updates in various javascript libraries and frameworks, influx made React stand out. Bootstrap has grown in popularity to become the most widely used CSS platform. React Bootstrap is perfect for creating responsive, fast React apps that don't need any extra downloads or dependencies. Bootstrap has an almost "native" feel now that it was redesigned especially for React.
Let's take a look at some of the most compelling arguments to use React Bootstrap in your applications.
In this tutorial, we'll learn how to use React and Bootstrap together and make your React app and make it look more responsive and beautiful. Let's get started with this tutorial.
Adding Bootstrap for React
The three most popular ways among developers to add Bootstrap to your React app are:
- Use BootstrapCDN
- Import Bootstrap in React as a dependency
- Install a React Bootstrap package (such as
bootstrap-react
or reactstrap
)
Using BootstrapCDN
It can be said the easiest method to add bootstrap to your React App. Because no installs or no type of download is required for that. As seen in the following snippet, we can simply add a <link> to the index.html file of the React app's <head> section. In the following snippet, you can observe the same:
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css"
integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4"
crossorigin="anonymous">
If you want to use the JavaScript modules that come with Bootstrap, you'll need to add the following <Script> tags near the end of your pages, just before the closing </body> tag.
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"
integrity="sha384-uefMccjFJAIv6A+rW+L4AHf99KvxDjWSu1z9VI8SKNVmz4sk7buKt/6v9KI65qnm"
crossorigin="anonymous"></script>
Import Bootstrap in React as a dependency
This is the recommended method for applying Bootstrap to your React program whether you're using a build tool or a package bundler like webpack. Bootstrap must be installed as a dependency for your software. Conduct the following commands in the terminal window to load Bootstrap.
npm install bootstrap
Once you've enabled Bootstrap, make sure to include it in your app's entry JavaScript file. This should be your src/index.js file if you're using create-react-app.
import 'bootstrap/dist/css/bootstrap.min.css';
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render(<App />, document.getElementById('root'));
registerServiceWorker();
The CSS classes and utilities can be used in the React framework. We will need to install the jquery and popper.js packages from npm if we choose to use the JavaScript components. Conduct the following command in the terminal window to install the following packages.
import'bootstrap/dist/css/bootstrap.min.css';
import $ from'jquery';
importPopperfrom'popper.js';
import'bootstrap/dist/js/bootstrap.bundle.min';
importReactfrom'react';
importReactDOMfrom'react-dom';
import'./index.css';
importAppfrom'./App';
importregisterServiceWorkerfrom'./registerServiceWorker';
ReactDOM.render(<Dropdown/>,document.getElementById('root'));
registerServiceWorker();
Install a React Bootstrap Package
The most common way to use bootstrap in a React program is to use the React Bootstrap kit. Many Bootstrap packages have been created by the group to rebuild Bootstrap components as React components. The two most renowned bootstrap packages are:
- react-bootstrap: It's a complete rewrite of the Bootstrap components in React.
- reactstrap: It's a React Bootstrap 4 part library that emphasizes composition and power. It is not reliant on jQuery or the Bootstrap JavaScript library.
React bootstrap
Install it using npm with the following line on bash:
npm install –save react-bootstrap
To import the Bootstrap file, open the src/index.js file and add the following code.
import 'bootstrap/dist/css/bootstrap.min.css';
Once installed, bootstrap components can be used in any file.
import 'bootstrap/dist/css/bootstrap.min.css';
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import ThemeSwitcher from './ThemeSwitcher';
import registerServiceWorker from './registerServiceWorker';
ReactDOM.render(<ThemeSwitcher />, document.getElementById('root'));
registerServiceWorker();
Output:
Using Reactstrap
Install it using npm with the following line on bash:
npm install –save reactstrap
We will import reactstrap components that are identical to other react components.
import {
Button,UncontrolledAlert,Card,CardImg,CardBody,
CardTitle,CardSubtitle,CardText
} from'reactstrap';
Reactstrap is the recommended library for React since it has strong support for modal windows.
Let's Create an Example
Header.js:
import React from 'react';
import logo from '../logo.svg';
import {
Container, Row, Col, Form, Input, Button, Navbar, Nav,
NavbarBrand, NavLink, NavItem, UncontrolledDropdown,
DropdownToggle, DropdownMenu, DropdownItem
} from 'reactstrap';
const AVATAR = 'https://www.gravatar.com/avatar/429e504af19fc3e1cfa5c4326ef3394c?s=240&d=mm&r=pg';
const Header = () => (
<header>
<Navbar fixed="top" color="light" light expand="xs" className="border-bottom border-gray bg-white" style={{ height: 80 }}>
<Container>
<Row noGutters className="position-relative w-100 align-items-center">
<Col className="d-none d-lg-flex justify-content-start">
<Nav className="mrx-auto" navbar>
<NavItem className="d-flex align-items-center">
<NavLink className="font-weight-bold" href="/">
<img src={AVATAR} alt="avatar" className="img-fluid rounded-circle" style={{ width: 36 }} />
</NavLink>
</NavItem>
<NavItem className="d-flex align-items-center">
<NavLink className="font-weight-bold" href="/">Home</NavLink>
</NavItem>
<NavItem className="d-flex align-items-center">
<NavLink className="font-weight-bold" href="/">Events</NavLink>
</NavItem>
<UncontrolledDropdown className="d-flex align-items-center" nav inNavbar>
<DropdownToggle className="font-weight-bold" nav caret>Learn</DropdownToggle>
<DropdownMenu right>
<DropdownItem className="font-weight-bold text-secondary text-uppercase" header disabled>Learn React</DropdownItem>
<DropdownItem divider />
<DropdownItem>Documentation</DropdownItem>
<DropdownItem>Tutorials</DropdownItem>
<DropdownItem>Courses</DropdownItem>
</DropdownMenu>
</UncontrolledDropdown>
</Nav>
</Col>
<Col className="d-flex justify-content-xs-start justify-content-lg-center">
<NavbarBrand className="d-inline-block p-0" href="/" style={{ width: 80 }}>
<img src={logo} alt="logo" className="position-relative img-fluid" />
</NavbarBrand>
</Col>
<Col className="d-none d-lg-flex justify-content-end">
<Form inline>
<Input type="search" className="mr-3" placeholder="Search React Courses" />
<Button type="submit" color="info" outline>Search</Button>
</Form>
</Col>
</Row>
</Container>
</Navbar>
</header>
);
export default Header;
Sidecard.js:
import React, { Fragment } from 'react';
import {
Button, UncontrolledAlert, Card, CardImg, CardBody,
CardTitle, CardSubtitle, CardText
} from 'reactstrap';
const BANNER = 'https://i.imgur.com/CaKdFMq.jpg';
const SideCard = () => (
<Fragment>
<UncontrolledAlert color="danger" className="d-none d-lg-block">
<strong>Account not activated.</strong>
</UncontrolledAlert>
<Card>
<CardImg top width="100%" src={BANNER} alt="banner" />
<CardBody>
<CardTitle className="h3 mb-2 pt-2 font-weight-bold text-secondary">Glad Chinda</CardTitle>
<CardSubtitle className="text-secondary mb-3 font-weight-light text-uppercase" style={{ fontSize: '0.8rem' }}>Web Developer, Lagos</CardSubtitle>
<CardText className="text-secondary mb-4" style={{ fontSize: '0.75rem' }}>Full-stack web developer learning new hacks one day at a time. Web technology enthusiast. Hacking stuffs @theflutterwave.</CardText>
<Button color="success" className="font-weight-bold">View Profile</Button>
</CardBody>
</Card>
</Fragment>
);
export default SideCard;
Post.js:
import React, { Component, Fragment } from 'react';
import axios from 'axios';
import { Badge } from 'reactstrap';
class Post extends Component {
state = { post: null }
componentDidMount() {
axios.get('https://baconipsum.com/api/?type=meat-and-filler¶s=4&format=text')
.then(response => this.setState({ post: response.data }));
}
render() {
return (
<Fragment>
{ this.state.post && <div className="position-relative">
<span className="d-block pb-2 mb-0 h6 text-uppercase text-info font-weight-bold">
Editor's Pick
<Badge pill color="success" className="text-uppercase px-2 py-1 ml-3 mb-1 align-middle" style={{ fontSize: '0.75rem' }}>New</Badge>
</span>
<span className="d-block pb-4 h2 text-dark border-bottom border-gray">Getting Started with React</span>
<article className="pt-5 text-secondary text-justify" style={{ fontSize: '0.9rem', whiteSpace: 'pre-line' }}>{this.state.post}</article>
</div> }
</Fragment>
);
}
}
export default Post;
App.js
import React, { Fragment } from 'react';
import axios from 'axios';
import { Container, Row, Col } from 'reactstrap';
import Post from './components/Post';
import Header from './components/Header';
import SideCard from './components/SideCard';
const App = () => (
<Fragment>
<Header />
<main className="my-5 py-5">
<Container className="px-0">
<Row noGutters className="pt-2 pt-md-5 w-100 px-4 px-xl-0 position-relative">
<Col xs={{ order: 2 }} md={{ size: 4, order: 1 }} tag="aside" className="pb-5 mb-5 pb-md-0 mb-md-0 mx-auto mx-md-0">
<SideCard />
</Col>
<Col xs={{ order: 1 }} md={{ size: 7, offset: 1 }} tag="section" className="py-5 mb-5 py-md-0 mb-md-0">
<Post />
</Col>
</Row>
</Container>
</main>
</Fragment>
);
export default App;
Output:
Conclusion
Now, you're ready to go and improve your react app, react-bootstrap is pretty easy and a cakewalk once you get hang of it!