# [React x Django] React Setup 1. 建立資料夾 2. 安裝React:```npm create-react-app frontend``` 3. 執行 > cd frontend > npm start --- ### 改icon frontend資料夾中的ico檔案移除,換成自己想要的favicon.ico檔 [製作favicon](https://formito.com/tools/favicon?ref=techmoon) > frontend/public中: > <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> > 會去讀取這個icon檔案 --- ### 設置 Header, Footer frontend/src 中,建立components資料夾 然後分別新增```Header.js```, ```Footer.js``` 檔案 建議在VScode中Extension安裝 ```ES7 React/Redux/GraphQL/React-Native snippets``` 這個套件可以快速展開許多React 模板 此處使用```rfce```來展開Head, Footer ```Header.js``` ```javascript= import React from 'react' function Header() { return ( <div> <header>Header</header> </div> ) } export default Header ``` ```Footer.js``` ```javascript= import React from 'react' function Footer() { return ( <div> <footer>Footer</footer> </div> ) } export default Footer ``` 放入```App.js```來顯示 (記得先import元件,再用tag來使用) ```import Header from './components/Header'``` ```'./components/Header'``` : 為component ```Header```:Module name ```javascript= import Header from './components/Header' import Footer from './components/Footer' function App() { return ( <div> <Header /> <main> <h1>Welcome</h1> </main> <Footer /> </div> ); } export default App; ``` 此時: ![](https://i.imgur.com/RQNGnvJ.png) --- ### 刪除用不到的檔案 因為要自己客製化 ```frontend/src/``` 中 : >```setupTest.js ```, ```App.css```, ```App.test.js``` 都刪除 並把```App.js```中的```<header>```內容都移除。 --- ### 客製化顯示 使用React Bootstrap [React Bootstrap](https://react-bootstrap.github.io) 模板 [Bootstrap Watch](https://bootswatch.com) #### 安裝 React Bootstrap ```npm install react-bootstrap bootstrap``` > 使用React Bootstrap,這個套件把Bootstrap components全部重製成React component的模式,讓人不另外載入script或jquery,用加載React component的方式就能使用。 >不過React bootstrap就只有component功能而已,style的部分要另外從bootstrap載入。 [React Bootstrap介紹](https://ithelp.ithome.com.tw/articles/10239905) #### 選個喜歡的模板CSS檔下載下來 (範例選用```Lux```) ![](https://i.imgur.com/YreBPm7.png) 放入```frontend/src```中 ![](https://i.imgur.com/x7gA0me.png) 回到vscode 將src/index.js導入剛剛的css ```import './bootstrap.min.css'``` 為了能讓conponent被套上bootsrtap 我們需要import ```react-bootstrap``` 在```App.js```中 ```javascript= import { Container } from 'react-bootstrap'//導入需要的component ``` >還能使用這些 > ``` > import { > Navbar, > Nav, > NavDropdown, > Form, > FormControl, > Button, > } from "react-bootstrap"; > ```javascript= import { Container } from 'react-bootstrap' import Header from './components/Header' import Footer from './components/Footer' function App() { return ( <div> <Header /> <main className="py-3"> <Container> <h1>Welcome</h1> </Container> </main> <Footer /> </div> ); } export default App; ``` ```Footer.js``` 調整 ```javascript= import React from 'react' import { Container, Row, Col } from 'react-bootstrap' function Footer() { return ( <div> <Container> <Row> <Col className="text-center py-3">Copyright &copy; Ezra Lin</Col> </Row> </Container> </div> ) } export default Footer ``` ```src/index.css``` 做一些公版的調整 ```css= /*針對main這個tag去做調整*/ main{ min-height: 80vh; } ``` ```Head.js``` 放入bootstrap ```Navbar``` [Navbar程式碼](https://react-bootstrap.github.io/components/navbar/) ```javascript= import React from 'react' import { Navbar, Nav, Container, Row } from 'react-bootstrap' function Header() { return ( <header> <Navbar bg="dark" variant="dark" expand="lg" collapseOnSelect> <Container> <Navbar.Brand href="/">Ezra's Web</Navbar.Brand> <Navbar.Toggle aria-controls="basic-navbar-nav" /> <Navbar.Collapse id="basic-navbar-nav"> <Nav className="mr-auto"> <Nav.Link href="/cart">Cart</Nav.Link> <Nav.Link href="/login">Login</Nav.Link> </Nav> </Navbar.Collapse> </Container> </Navbar> </header> ) } export default Header ``` #### 在Navbar選項放入圖示 [CDNjs.com](https://cdnjs.com) ![](https://i.imgur.com/40XUwnh.png) ```Copy Link Tag``` 複製連結後到frontend/public底下的index.html 貼上 ```html= <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" referrerpolicy="no-referrer" /> ``` 導入這個函式庫以後 在到有Navbar的```Header.js``` 購物車icon ```javascript= <i className="fas fa-shopping-cart"></i> ``` 找到要插入icon的地方做調整 ```javascript= <Nav.Link href="/cart"><i className="fas fa-shopping-cart"></i>Cart</Nav.Link> ``` ```Header.js```程式碼: ```javascript= import React from 'react' import { Navbar, Nav, Container, Row } from 'react-bootstrap' function Header() { return ( <header> <Navbar bg="dark" variant="dark" expand="lg" collapseOnSelect> <Container> <Navbar.Brand href="/">Ezra's Web</Navbar.Brand> <Navbar.Toggle aria-controls="basic-navbar-nav" /> <Navbar.Collapse id="basic-navbar-nav"> <Nav className="mr-auto"> <Nav.Link href="/cart"><i className="fas fa-shopping-cart"></i>Cart</Nav.Link> <Nav.Link href="/login"><i className="fas fa-user"></i>Login</Nav.Link> </Nav> </Navbar.Collapse> </Container> </Navbar> </header> ) } export default Header ``` 目前畫面: ![](https://i.imgur.com/cBulNXg.png) --- ### Card Product Listing ### Rating 目前畫面: ![](https://i.imgur.com/FvV9BDf.png)