css파일 안에서 class등으로 스타일을 선언해주고, 거기 안에 이미지 url을 적어준다.
.main-bg {
height: 300px;
background-image: url("/public/img/bg-1.png");
background-size: cover;
background-position: center;
}
App.js에서는 class를 박은 div를 통해 img를 가져옴.
<div className="main-bg"></div>
이미지 import해오고 html 태그 안에서 style로 가져오기
src폴더 안에 있는 img 파일을 가져와서 보여줄 수 있음.
근데 이 방법은 뭔가 코드가 더러워질거 같아서 안쓸듯.
img 태그의 src에 경로입력하여 가져오기
//1번째 방법
import bg from './bg.png'
<div style={{ backgroundImage : 'url(' + bg + ')' }}>
//2번째 방법
<img src="https://어쩌구저쩌구/경로/이미지.jpg"/>
사이트 발행전에 (build시에) html css js 파일등이 압축되어 올라감(bunding).
public 폴더 안에 넣어두면 build할때 파일이 보존됨. 유용해보임.
이미지 사용할땐 그냥 /이미지경로 써두면 됨.
근데 메인 주소가 아니라 /가 붙은 경로의 경우 img로딩이 제대로 안될수있음
예시 : www.메인주소.com으로는 이미지 로딩됨.
근데 www.메인주소.com/products는 로딩 안됨.
이걸 방지하기 위해, public 폴더의 이미지 쓰는 권장방식 : process.env.PUBLIC_URL 붙여주기
import bg from "/img/bg-1.png";
<img src={process.env.PUBLIC_URL + bg} />
useState도 배웠겠다, map으로 반복문도 배웠겠다, 이것저것 배운 티좀 내면서 꺼드럭 대고 싶어서 괜히 복잡하게 코드를 짬(혹시 이리저리 바꿔먹다 원본코드 날려먹을까봐 하남자 티 내면서 원본은 주석처리함).
잡탕밥 짬통코드가 완성되었다.
const [shoesState, setShoesState] = useState([
"img/shoes1",
"img/shoes2",
"img/shoes3",
]);
<div className="container">
<div className="row">
{shoesState.map((shoes, i) => (
<div className="col-md-4" key={i}>
<img
className="products"
src={import.meta.env.BASE_URL + shoes + ".jpg"}
/>
<h4>상품명</h4>
<p>상품설명</p>
</div>
))}
</div>
{/* <div className="row">
<div className="col-md-4">
<img src={shoes1} />
<h4>상품명</h4>
<p>상품설명</p>
</div>
<div className="col-md-4">
<img src={shoes1} />
<h4>상품명</h4>
<p>상품설명</p>
</div>
<div className="col-md-4">
<img src={shoes1} />
<h4>상품명</h4>
<p>상품설명</p>
</div>
</div> */}
</div>
내일되면 지워야지.