Difference between revisions of "Creating Admin Portal Project in React"
(→Installing & Using FontAwesome Icons) |
|||
| Line 13: | Line 13: | ||
** '''Prettier''' by Esben Petersen | ** '''Prettier''' by Esben Petersen | ||
*** Set '''Format on Save''' | *** Set '''Format on Save''' | ||
| + | ** Auto Import by Sergey Korenuk | ||
in VS Code go to File / Preferences / Settings and add the line below in UserSettings section | in VS Code go to File / Preferences / Settings and add the line below in UserSettings section | ||
| Line 62: | Line 63: | ||
npx nodemon index.js | npx nodemon index.js | ||
== Coding == | == Coding == | ||
| − | === | + | === Routing === |
| + | install router | ||
| + | npm i react-router-dom | ||
| + | in '''index.js''' file add this line | ||
| + | import { BrowserRouter } from "react-router-dom"; | ||
| + | and wrap <App/> with <BrowserRouter> like below | ||
| + | <pre> | ||
| + | ReactDOM.render( | ||
| + | <BrowserRouter> | ||
| + | <App /> | ||
| + | </BrowserRouter>, | ||
| + | document.getElementById("root") | ||
| + | ); | ||
| + | </pre> | ||
| + | |||
| + | in App.js import '''Route''' & '''Switch''' | ||
| + | import { Route, Switch } from "react-router-dom"; | ||
| + | and add these lines to render() | ||
| + | <pre> | ||
| + | return ( | ||
| + | <div className="App"> | ||
| + | <TopBar /> | ||
| + | <SideBar /> | ||
| + | <header className="App-header"> | ||
| + | <div className="content"> | ||
| + | <Switch> | ||
| + | <Route path="/admin" component={Admin} /> | ||
| + | </Switch> | ||
| + | </div> | ||
| + | </header> | ||
| + | </div> | ||
| + | ); | ||
| + | </pre> | ||
| + | So in this scenario there is one top bar and a left side bar. They are static. The rest of the screen (div with className="content") will be different in every page. | ||
| + | |||
| + | Switch is for stopping rendering to go to next Route which matches the satisfying criteria. Like: | ||
| + | |||
| + | if the first route is path="/admin" and the second route is "/" without a switch here it will render both of them back to back. | ||
| + | === Links === | ||
| + | In sideBar component when I click a link it normalyy reload the whole page as it uses <a> tag to prevent this import Link | ||
| + | import {Link} from "react-router-dom"; | ||
| + | and replace '''<a''' with '''<Link''' and '''href''' with '''to'''. ie: | ||
| + | <Link to="/product"> | ||
Revision as of 12:41, 21 December 2018
Contents
Starting a project
Setting Up The Environment
- install node
- install create-react-app
npm i -g create-react-app
install VS Code
- install VS Code
- install VS Code snippets - Click Extensions icon on the left sidebar and search and install
- Simple React Snippets by Burke Holland
- Prettier by Esben Petersen
- Set Format on Save
- Auto Import by Sergey Korenuk
in VS Code go to File / Preferences / Settings and add the line below in UserSettings section
"editor.formatOnSave":true
Creating React App
Go to the project folder
npx create-react-app adminportal
cd adminportal
adminportal is lowercase because [Create React App] doesn't like capitals
Installing Bootstrap
npm i bootstrap@4.1.1
go to ./src/index.js and add this line
import 'bootstrap/dist/css/bootstrap.css';
Install reactstrap
npm install --save reactstrap
Check it's site for more details
Installing & Using FontAwesome Icons
npm i --save @fortawesome/fontawesome-svg-core npm i --save @fortawesome/free-solid-svg-icons npm i --save @fortawesome/react-fontawesome
Then in your app, import and add an icon to the Library:App.js
import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faIgloo } from '@fortawesome/free-solid-svg-icons'
library.add(faIgloo)
Lastly, use the component and icon in your JSX:
import React from 'react'
import { faSearch } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
export const Food = () => (
<div>
<FontAwesomeIcon icon={faSearch} />
</div>
)
https://scotch.io/tutorials/using-font-awesome-5-with-react
Install nodemon
it restarts the application when file contents changes.
npm install --save-dev nodemon
Usage
npx nodemon index.js
Coding
Routing
install router
npm i react-router-dom
in index.js file add this line
import { BrowserRouter } from "react-router-dom";
and wrap <App/> with <BrowserRouter> like below
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById("root")
);
in App.js import Route & Switch
import { Route, Switch } from "react-router-dom";
and add these lines to render()
return (
<div className="App">
<TopBar />
<SideBar />
<header className="App-header">
<div className="content">
<Switch>
<Route path="/admin" component={Admin} />
</Switch>
</div>
</header>
</div>
);
So in this scenario there is one top bar and a left side bar. They are static. The rest of the screen (div with className="content") will be different in every page.
Switch is for stopping rendering to go to next Route which matches the satisfying criteria. Like:
if the first route is path="/admin" and the second route is "/" without a switch here it will render both of them back to back.
Links
In sideBar component when I click a link it normalyy reload the whole page as it uses <a> tag to prevent this import Link
import {Link} from "react-router-dom";
and replace <a with <Link and href with to. ie:
<Link to="/product">