https://pugjs.org/language/mixins.html
mixins을 사용하면 재사용 가능한 pug blocks을 만들 수 있음
mixin은 partial이긴 하지만, 데이터를 받을 수 있는 partial임(mixin은 똑똑한 partial이다!!)
Partials 정리 문서
footer
처럼 반복해서 나오는 HTML block이 필요한데, 형태는 같지만 각자 다른 데이터를 가져야한다면 mixin
을 이용한다.
1. views/mixins
폴더 만들고 그 안에 videos.pug
파일 만들기
2. pug파일 안에 반복사용할 내용 아래와 같이 작성
video.pug
mixin video(info)
div
h4=info.title
ul
li #{video.rating}/5.
li #{video.comments} comments.
li Posted #{video.createdAt}.
li #{video.views} views.
info
는 mixin
이 받게 될 데이터를 지칭3. home에 mixin사용
+
을 붙여줘야함home.pug
extends base.pug
include mixins/video
block content
h2 Welcome here you will see the trending videos
each potato in videos
+video(potato)
else
li Sorry nothing found.
potato
는 item(즉, 영상 데이터)videos
안에 각각의 potato
에 대해서, video
라는 mixin
을 호출해서 potato
라는 정보객체를 보내고 있는 것임 그리고 그건 video mixin
안에 info
가 될것임1. include mixins/video
로 video mixin
을 가져오고
2. video mixin
을 사용해서, 어떤 정보를 video mixin
으로 보내주고
home.pug
each potato in videos
+video(potato)
3. 그 정보를 이용해서 HTML로 나타냄
video.pug
mixin video(info)
div
h4=info.title
ul
li #{info.rating}/5.
li #{info.comments} comments.
li Posted #{info.createdAt}.
li #{info.views} views.
4. HTML을 return해주는 일종의 function을 갖게된 것임
1. video
function에 info
변수를 보내주고
mixin video(info)
2. info
은 potato
라는 객체다.
3. potato
객체는 뭐냐? videos
라는 array안에 한 item이다.
const videos = [
{
title: "First Video",
rating: 5,
comments: 2,
createdAt: "2 minutes ago",
views: 59,
id: 1,
},
{
title: "Second Video",
rating: 5,
comments: 2,
createdAt: "2 minutes ago",
views: 59,
id: 1,
},
{
title: "Third Video",
rating: 5,
comments: 2,
createdAt: "2 minutes ago",
views: 59,
id: 1,
},
]; //fakeVideos