React

나만의 홈페이지 만들기-07 [마스터페이지&페이지Route]

제이아보(JahvoTrust) 2022. 10. 4. 22:04
반응형
  • 마스터페이지를 만들어서 내부의 컨텐츠 컴포넌트만 변경하기 위해 작업
  • Layout.js 를 추가한다.
import React from 'react'
import Navbar from 'react-bootstrap/Navbar';
import Container from 'react-bootstrap/Container';

export default function Layout(props) {
    return (
        <div className={props.className} >
					  <p className='text-center'>header</p>
						<hr />
            {props.children}
            <hr />
            <p className='text-center'>footer</p>
        </div>
    )
}

props 파라미터를 이용해서 부모페이지 안쪽에 들어갈 자식 컴포넌트를 선언해준다.

props.children 은 Layout tag 안에 들어올 컴포넌트를 말한다.

위처럼 부모 컴포넌트를 만들고 다른컴포넌트를 감싸주면

<Layout>
      <Container>   
        <Row xs={1} md={3} className="g-4">
          {getResult && getResult.map((r) =>
            <Col key={r.uuid}>
              <Card >
                <Card.Img variant="top" src={r.displayIcon} />
                <Card.Body>
                  <Card.Title>{r.displayName}</Card.Title>
                  <Card.Text>
                    {r.category}
                  </Card.Text>
                </Card.Body>
                <Card.Footer>
                  <small className="text-muted">Last updated 3 mins ago</small>
                </Card.Footer>
              </Card>
            </Col>
          )
          }
        </Row>
      </Container>
    </Layout>

위 아래 header와 footer 가 있고, 가운데 컴포넌트들이 나타나게된다.

Layout 컴포넌트를 아래와 같이 완성하면,

import React from 'react'
import Navbar from 'react-bootstrap/Navbar';
import Container from 'react-bootstrap/Container';

export default function Layout(props) {
    return (
        <div className={props.className} >
            <Navbar bg="dark" variant="dark" >
                <Container>
                    <Navbar.Brand href="#home">
                        <img
                            alt=""
                            src="/logo192.png"
                            width="30"
                            height="30"
                            className="d-inline-block align-top"
                        />{' '}
                        React Bootstrap
                    </Navbar.Brand>
                </Container>
            </Navbar>
            {props.children}
            <hr />
            <p className='text-center'>footer</p>
        </div>
    )
}

Layout 컴포넌트 상단의 Nav 컴포넌트들이 나타나게된다.

이로써 내부의 컨텐츠 컴포넌트만 만들면, 외부 레이아웃은 동일하게 가져갈수 있게 된다.

왼쪽에 Leftmenu 와 같은 컴포넌트를 추가하여, 메뉴를 만들수도 있다.

  • 라우팅

아래처럼 BrowerRouter 컴포넌트를 이용해서 라우팅정보를 등록할수 있다.

<PageLayout>
  <BrowserRouter>
        <Routes>
            <Route path="/" element={<UnauthenticatedMain />} />
            <Route path="/profile" element={<Profile />} />
            <Route path="/detail/:NO" element={<Detail />} />
        </Routes>
  </BrowserRouter>
</PageLayout>

parent component가 있을경우 라우팅 컴포넌트보다 바깥에 있어야한다.

 

반응형