728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ๋ฐ์ดํฐ๋ฅผ JavaScript ํ์ผ์ ์ ์ฅํ์ฌ export / import ํด์ค ๋ค์ props ๋ฌธ๋ฒ์ ํ์ฉํ์ฌ ์ํ๋ Component ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ก ๋ฐ ๋ฑ๋กํ ํ์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ํด์ฃผ์๋ค.
- ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ด ๋ชฉ์ ์ด์๊ธฐ ๋๋ฌธ์ ์๋จ๋ฉ๋ด๋ Bootstrap ์ ์ด์ฉํด์ ๋ง๋ค๊ณ , ์ ์ฒด์ ์ผ๋ก ์ฌํํ๊ฒ ๋์์ธ์ ํด์ฃผ์๋ค.
๐ ๋ธ๋ก๊ทธ ๊ธ๋ชฉ๋ก ๋ ์ด์์ ๋ง๋ค๊ธฐ
- ๋ธ๋ก๊ทธ ๊ธ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๋ List ๋ผ๋ Component ๋ฅผ ๋ง๋ค์ด์ App.vue ์ ๋ณด์ฌ์ฃผ๊ธฐ๋ก ์ ํ๋ค.
- ์ด๋ props ๋ฌธ๋ฒ์ ์ด์ฉํ๋ฉด ๋๋ ๊ฒ์ด๋ผ ๋ณต์ต๋ ํ ๊ฒธ ๊ฐ์ ๋ฃ๊ธฐ ์ ์ ํผ์์ ๋จผ์ ์งํํด๋ณด์๋ค.
๐ค List.vue ํ์ผ ๋ง๋ค์ด ์ฝ๋ ์์ฑํ๊ธฐ
<template>
<div>
<h5>๋ธ๋ก๊ทธ ๊ธ ์ ๋ชฉ</h5>
<p>๋ธ๋ก๊ทธ ๊ธ ๋ ์ง</p>
</div>
<div>
<h5>๋ธ๋ก๊ทธ ๊ธ ์ ๋ชฉ</h5>
<p>๋ธ๋ก๊ทธ ๊ธ ๋ ์ง</p>
</div>
<div>
<h5>๋ธ๋ก๊ทธ ๊ธ ์ ๋ชฉ</h5>
<p>๋ธ๋ก๊ทธ ๊ธ ๋ ์ง</p>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>
- ๋จผ์ List.vue ํ์ผ์๋ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
- ๋์ค์ ๋ธ๋ก๊ทธ ๊ธ ์ ๋ชฉ, ๋ธ๋ก๊ทธ ๊ธ ๋ ์ง ๋ผ๊ณ ์ ํ ๋ถ๋ถ์ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ง๋ค์ด ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ํด์ค ๊ฒ์ด๋ค.
๐ค App.vue ํ์ผ์ List Component ์ถ๊ฐํ๊ธฐ
<List />
- ์ด์ App.vue ํ์ผ์ <template></template> ์ฌ์ด์ ์ํ๋ ์์น์ ์์ ๊ฐ์ด List Component ๋ฅผ ๋ฃ์ด์ค๋ค.
๐ ๋ธ๋ก๊ทธ ๊ธ๋ชฉ๋ก ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํ๊ธฐ
๐ค ๋ธ๋ก๊ทธ ๊ธ๋ชฉ๋ก ๋ฐ์ดํฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
[
{
title : '์ฒซ๋ฒ์งธ ํ๋ก์ ํธ : ํ์๋งค๋ฌผ ์ ๋ฌธ ๋ถ๋์ฐ ์ฑ',
content : 'Vue๋ฅผ ์ด์ฉํ๋ฉด ๋น๋๊ฐ์ด ๋งค๋ํ ์ฑ์ ๋ง๋ค ์ ์์ต๋๋ค',
date : 'September 24, 2021',
number : 0
},{
title : '๋๋ฒ์งธ ํ๋ก์ ํธ : ์ค๋ง์นด์ธ ๋ฐฐ๋ฌ ์ฑ',
content : '์์์ด ์๋๋ผ ์
ฐํ๋ฅผ ์ง์ ๋ฐฐ๋ฌํด๋๋ฆฝ๋๋ค',
date : 'October 20, 2020',
number : 1
},{
title : '์ธ๋ฒ์งธ ํ๋ก์ ํธ : ํํผ ์ฑ',
content : '๊ฑฐ๋ฆฌ๋ฅผ ์ค์ ํ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ํ์ดํฐ๋ฅผ ์๊ฐํด๋๋ ค์! ์๋ก ์ธ์๋ณด์ธ์',
date : 'April 24, 2019',
number : 2
}
];
- ์ด์ ๊ฐ์ฌ๋์ด ์ค๋นํด์ฃผ์ ์ ๋ฐ์ดํฐ๋ฅผ App.vue ์ ์ ์ฅํ ๋ค, props ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ List.vue ๋ก ๋ฐ์์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ํด์ฃผ๋ฉด ๋๋ค.
๐ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ JavaScript ํ์ผ ๋ง๋ค๊ธฐ
export default [
{
title : '์ฒซ๋ฒ์งธ ํ๋ก์ ํธ : ํ์๋งค๋ฌผ ์ ๋ฌธ ๋ถ๋์ฐ ์ฑ',
content : 'Vue๋ฅผ ์ด์ฉํ๋ฉด ๋น๋๊ฐ์ด ๋งค๋ํ ์ฑ์ ๋ง๋ค ์ ์์ต๋๋ค',
date : 'September 24, 2021',
number : 0
},{
title : '๋๋ฒ์งธ ํ๋ก์ ํธ : ์ค๋ง์นด์ธ ๋ฐฐ๋ฌ ์ฑ',
content : '์์์ด ์๋๋ผ ์
ฐํ๋ฅผ ์ง์ ๋ฐฐ๋ฌํด๋๋ฆฝ๋๋ค',
date : 'October 20, 2020',
number : 1
},{
title : '์ธ๋ฒ์งธ ํ๋ก์ ํธ : ํํผ ์ฑ',
content : '๊ฑฐ๋ฆฌ๋ฅผ ์ค์ ํ๋ฉด ๊ฐ์ฅ ๊ฐ๊น์ด ํ์ดํฐ๋ฅผ ์๊ฐํด๋๋ ค์! ์๋ก ์ธ์๋ณด์ธ์',
date : 'April 24, 2019',
number : 2
}
];
- ๋ฐ์ดํฐ๊ฐ ์ ์ผ๋ฉด ๊ตณ์ด JavaScript ํ์ผ์ ๋ง๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ง๋ง, ๋ณดํต์ ๋ฐ์ดํฐ๊ฐ ๋ง์์ ๋ฐ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ด๋ ต๋ค.
- ๋ฐ๋ผ์, ๋๋ src/assets ๊ฒฝ๋ก์ blog.js ํ์ผ์ ๋ง๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์์ ๊ฐ์ด export ํ ์ ์๋๋ก ์ ์ฅํด์ฃผ์๋ค.
๐ค App.vue ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ blog.js ํ์ผ ๋ถ๋ฌ์ ๋ฑ๋กํ๊ธฐ
<script>
import blog from './assets/blog'
export default {
name: 'App',
data(){
return {
posts : blog,
}
},
components: {
}
}
</script>
- App.vue ๋ก ๋์์์ blog.js ํ์ผ์ blog ๋ผ๋ ์ด๋ฆ์ผ๋ก import ๋ฅผ ํด์ฃผ์๋ค.
- import ๋ฅผ ํ๊ณ ๋๋ฉด ๋ฑ๋กํ๋ ๊ณผ์ ์ด ํ์ํ๋ฐ, ์ด๋ data ๋ณด๊ดํจ์์ ์งํํ๋ฉด ๋๋ค.
- ๋์ ๊ฒฝ์ฐ, blog ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ถ๋ฌ์จ ๋ฐ์ดํฐ๋ฅผ posts ๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํด์ฃผ์๋ค.
๐ค props ๋ฌธ๋ฒ์ ์ด์ฉํ์ฌ List.vue ๋ก ๋ฐ์ดํฐ ์ ์กํ๊ธฐ
<List :posts="posts" />
- ๊ธฐ์กด์ ์์ฑํด๋ <List/> ์ :posts="posts" ๋ฅผ ์ถ๊ฐํ์ฌ posts ๋ผ๋ ๋ฐ์ดํฐ๊ฐ posts ๋ผ๋ ์ด๋ฆ์ผ๋ก List Component ๋ก ์ ์ก๋๋๋ก ์ฝ๋๋ฅผ ์์ ํด์ฃผ์๋ค.
๐ค List.vue ๋ก ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ ๋ฑ๋กํ ํ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉํ๊ธฐ
<template>
<div class="container" id="posts">
<div class="post" v-for="(post, i) in posts" :key="i">
<span class="post-title">{{post.title}}</span>
<span class="post-date">{{post.date}}</span>
</div>
</div>
</template>
<script>
export default {
name: 'List',
data(){
return {
}
},
props: {
posts : Array,
},
}
</script>
- ๋จผ์ , props ๋ก ๋ฐ์์จ posts ๋ผ๋ ๋ฐ์ดํฐ๋ฅผ <script></script> ๋ด์ props: { posts : Array } ๋ผ๋ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ๋ฑ๋กํ๋ ๊ณผ์ ์ ์งํํด์ฃผ์๋ค.
- ์ด์ ๊ท์น์ ์ผ๋ก ๋ฐ๋ณต๋๋ ์ฝ๋๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฐ๊ฟ์ค ๋ค์ ๋ฐ์ดํฐ๋ฐ์ธ๋ฉ์ ํด์ฃผ์๋ค.
728x90
๋ฐ์ํ