การทำ Master Page เกิดจากการที่ หน้าเว็บจะมีส่วนต่างๆที่เหมือนๆ กันในแต่ละหน้า เช่น Header Menu Footer หากเรามีหน้าเว็บ 20 หน้า และมีการเพิ่ม เมนูขึ้นมาทีหลังเราต้องแก้เมนูทั้ง 20 ไฟล์ แต่จะดีกว่าหากเราสามารถแก้ไขข้อมูลในไฟล์เดียว แล้วหน้าเว็บทั้ง 20 หน้า เปลี่ยนตามไปด้วย
ในบทความนี้จะแสดงตัวอย่างการทำ Master Page โดยใช้ ReactJS Bootstrap และ react-router-dom และเป็นการแสดงตัวอย่างของ การใช้งาน ReactBootstrap ร่วมกับ react-router-dom อีกด้วย
หมายเหตุ ตัวอย่างนี้ใช้ react-router-dom version 5.2.0 ซึ่งตอนนี้มี version react-router-dom ใหม่แล้ว
Link ที่เกี่ยวข้อง ตัวอย่างการใช้งาน React Router DOM ใน React Material UI ตอน 1
ดู code ในcode sand box
https://codesandbox.io/embed/intelligent-wind-hhnln?fontsize=14&hidenavigation=1&theme=dark
1. สร้าง Project ชื่อว่า ด้วยคำสั่ง npx create-react-app react_bootstrap
2. เข้าไปใน folder react_bootstrap ที่เพิ่งสร้าง ด้วยคำสั่ง cd react_bootstrap และ install ReactBoostrap ด้วยคำสั่ง npm install react-bootstrap@next bootstrap@5.1.1 --save
3.install react-router-dom ด้วยคำสั่ง npm install react-router-dom --save
4. เปิด project ใน visual studio code ด้วนคำสั่ง code .
5. สร้างไฟล์ master page ชื่อว่า master_page.js
ใส่ code ดังนี้
import { Navbar, Container ,Nav} from 'react-bootstrap';
import 'bootstrap/dist/css/bootstrap.min.css';
//สร้าง Component Master Page
const MasterPage=(props)=>{
return (<>
{/*-------สร้าง แถบเมนูด้านบน ด้วย Navbar จาก ReactBootstrap-----------*/}
<Navbar bg="light" expand="lg">
<Container>
<Navbar.Brand href="#home">React-Bootstrap</Navbar.Brand>
<Navbar.Toggle aria-controls="basic-navbar-nav" />
<Navbar.Collapse id="basic-navbar-nav">
<Nav className="me-auto">
{/*--------สร้าง Link ไปที่ page1----------*/}
<Nav.Link href="#/page1">Page1</Nav.Link>
{/*--------สร้าง Link ไปที่ page2----------*/}
<Nav.Link href="#/page2">Page2</Nav.Link>
</Nav>
</Navbar.Collapse>
</Container>
</Navbar>
<div className="container">
{/*--------ส่วนของเนื้อหาเว็บที่จะมาแสดง-----*/}
{props.children}
</div>
</>)
}
export default MasterPage;
6. สร้างไฟล์ page1.js และ page2.js โดยมี code ดังนี้
ไฟล์ page1.js
//import ไฟล์ master page
import MasterPage from "./master_page";
const Page1=()=>{
return(<MasterPage>
<h4>Page1</h4>
</MasterPage>);
}
export default Page1;
ไฟล์ page2.js
//import ไฟล์ master page
import MasterPage from "./master_page";
const Page2=()=>{
return(<MasterPage>
<h4>page2</h4>
</MasterPage>);
}
export default Page2;
7. แก้ไฟล์ App.js เพื่อกำหนด Route
//เรียกใช้ Object ใน react-router-dom
import {
HashRouter,
Switch,
Route,
useParams,
useHistory
} from "react-router-dom";
import Page1 from "./page1";
import Page2 from "./page2";
function App() {
return (
<>
<HashRouter>
<Switch>
<Route exact path="/" children={<Page1 />}></Route>
{/* เมื่อเปิดมาหน้าแรกให้แสดง Component Page1 */}
<Route path="/page1" children={<Page1 />}></Route>
{/* สำหรับ Path /page1 ให้แสดง Component Page1 */}
<Route path="/page2" children={<Page2 />}></Route>
{/* สำหรับ Path /page2 ให้แสดง Component Page2 */}
<Route path="*" children={<Page1 />}></Route>
{/* ถ้าไม่ตรงกับ path ตามที่กำหนเไว้ด้านบนให้แสดง Component Page1 */}
</Switch>
</HashRouter>
</>
);
}
export default App;
ผลลัพธ์ที่ได้คือ
หากเราต้องการเพิ่มเมนู หรือแก้ไข ้ข้อความ header เราสามารถเพิ่มได้ในเมนู ในไฟล์ master_page.js แล้วทั้งหน้า page1 กับ page2 ก็จะเปลี่ยนตาม