npm install react-bootstrap bootstrap
import 'bootstrap/dist/css/bootstrap.min.css';
./이미지경로
import 작명 from '이미지경로';
<div className='main-bg' style={{backgroundImage :'url('+ bg +')'}}></div>
리액트는 사이트 발행 전에 htmljs css파일을 압축한다.(bundling)
public 폴더에 있던 것 압축이 안된다.
/이미지경로
다른 파일에 있던 변수가져오려면,
1.변수를 export하고
2. import를 하면 된다.
export하려면 export default 변수명
import 하려면 import 작명 from './파일경로'
export 여러개 하려면 export{변수1, 변수2}
를 기입한다.
import 여러개 하라면 import {변수1, 변수2} from './경로'
를 기입한다.\
변수뿐만이 아니라 함수 & 컴포넌트도 export 가능하다.
let data = [
{
id: 0,
title: "말티즈",
content: "말티즈는 참지않긔",
price: 5
},
{
id : 1,
title : "포메",
content : "날아다니는 솜뭉치",
price : 110000
},
{
id : 2,
title : "비숑",
content : "솜사탕 한입 하실라우?",
price : 130000
}
]
export default data;
import { useState } from 'react';
선언 꼭하기! [
로 시작하면 배열!{
로 시작하면 obj 자료!
<div className="container">
<div className="row">
<Card dogs={dogs[0]}> </Card>
<Card dogs={dogs[1]}> </Card>
<Card dogs={dogs[2]}> </Card>
</div>
</div>
function Card(props){
return (
<div className="col-md-4">
<img src="https://ilyo.co.kr/contents/article/images/2020/0320/1584669108291841.jpg" width ="80%"/>
<h4>{props.dogs.title}</h4>
<p>{props.dogs.content}</p>
<p>{props.dogs.price}</p>
</div>
)
};
{
dogs.map((a,i)=> {
return (
<Card dogs={dogs[i]} i={i+1}> </Card>
)
})
}
페이지 나누는법
1. 컴포넌트만들어서 상세페이지 내용채움
2. 누가 /detail 접속하면 그 컴포넌트 보여준다
react-router-dom 라이브러리 쓰면 쉽게 만들 수 있다.
터미널에서 npm install react-router-dom
src 폴더 index.js
app.js
페이지 이동버튼은 <Link>
<Link to="/">홈</Link>
<Link to="/detail">상세페이지</Link>
<Routes>
<Route path="/" element={
<>
<div className='main-bg'></div>
<div className="container">
<div className="row">
{
dogs.map((a,i)=> {
return (
<Card dogs={dogs[i]} i={i+1}> </Card>
)
})
}
</div>
</div>
</>
} />
<Route path="/detail" element={<div>상세페이지임</div>} />
</Routes>
<Detail>
만들기function Detail(){
return (
<div className="container">
<div className="row">
<div className="col-md-6">
<img src="https://codingapple1.github.io/shop/shoes1.jpg" width="100%" />
</div>
<div className="col-md-6">
<h4 className="pt-5">상품명</h4>
<p>상품설명</p>
<p>120000원</p>
<button className="btn btn-danger">주문하기</button>
</div>
</div>
</div>
)
}
export default Detail;
let navigate = useNavigate();
<Nav.Link onClick={()=> {navigate('/')}}>Home</Nav.Link>
<Nav.Link onClick={()=> {navigate('/detail')}}>Detail</Nav.Link>
navigate(-1)은 뒤로가기 버튼이다.
<Route path="*" element={<div>없는 페이지입니다.</div>} />
태그 안에 태그가 들어갔다 를 뜻한다.
장점1. 작성 간단.
장점2. Nested routes 접속시엔 element 2개나 보인다.
어디보여줘야할지 잘 작성해줘야한다 <Outlet>
를 통해서
<Route path="/about" element={< About />} />
<Route path="/about/member" element={< About />} />
<Route path="/about/location" element={< About />} />
위와 아래 코드는 같다.
<Route path="/about" element={< About />} >
<Route path="member" element={< About />} />
<Route path="location" element={< About />} />
</Route>
function About(){
return (
<div>
<h4>회사정보임</h4>
<Outlet></Outlet>
</div>
)
}
Q. nested routes 쓰는 순간?