front-end/Vue.js
Vuex 기초배우기 #1
정구
2022. 2. 22. 10:21
728x90
유튜브 강의 중 Vuex에 관해 괜찮은 것이 있길래 정리해보았다.
사용자 정보를 입력하고 전체 사용자에 관한 목록을 출력하는 단순한 코드이다.
/src/App.vue
<template>
<v-app id="inspire">
<v-navigation-drawer v-model="drawer" fixed app> //네비게이션바
<v-list dense>
<v-list-tile router :to="{ name: 'home' }" exact>
<v-list-tile-action>
<v-icon>home</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>Home</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
<v-list-tile router :to="{ name: 'users' }" exact>
<v-list-tile-action>
<v-icon>person</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>Users</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</v-navigation-drawer>
<v-toolbar color="indigo" dark fixed app>
<v-toolbar-side-icon @click.stop="drawer = !drawer"></v-toolbar-side-icon>
<v-toolbar-title>Application</v-toolbar-title>
</v-toolbar>
<v-content>
<router-view /> //라우팅할 페이지
</v-content>
<v-footer color="indigo" app> //푸터
<span class="white--text">© 2021</span>
</v-footer>
</v-app>
</template>
<script>
export default {
data: () => ({
drawer: null,
}),
props: {
source: String,
},
};
</script>
/router.js
import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)
export default new Router({
mode: 'history',
base: process.env.BASE_URL,
routes: [
{
path: '/',
name: 'home',
component: () => import(/* webpackChunkName: "about" */ './views/Home.vue')
},
{
path: '/users',
name: 'users',
component: () => import(/* webpackChunkName: "users" */ './views/Users.vue')
}
]
})
/src/views/User.vue
(Home.vue에는 별 내용이 없으니 생략하겠다.)
<template>
<v-container grid-list-xl>
<v-layout row wrap>
<v-flex xs6>
<AllUsers></AllUsers>
</v-flex>
<v-flex xs6>
<SignUp></SignUp>
</v-flex>
</v-layout>
</v-container>
</template>
<script>
import AllUsers from '@/components/Users/AllUsers'
import SignUp from '@/components/Users/SignUp'
export default {
components: {
AllUsers,
SignUp
},
}
</script>
/src/components/Users/AllUsers.vue
<template>
<div>
<h1>All Users</h1>
<v-list two-line>
<v-list-tile
v-for="(user, index) in allUsers"
:key="index"
avatar
>
<v-list-tile-avatar color="grey lighten-3">
<img :src="user.src">
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title v-html="user.name"></v-list-tile-title>
<v-list-tile-sub-title>id:#{{index}} / {{user.address}} 거주</v-list-tile-sub-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</div>
</template>
<script>
import { EventBus } from '@/main.js'
export default {
data() {
return {
allUsers:[
{userId: 'hoza123', password: '123', name: 'Hoza', address: 'Seoul', src:'https://goo.gl/oqLfJR'},
{userId: 'max123', password: '456', name: 'Max', address: 'Berlin', src:'https://goo.gl/Ksk9B9'},
{userId: 'lego123', password: '789', name: 'Lego', address: 'Busan', src:'https://goo.gl/x7SpCD'}
]
}
},
mounted() {
EventBus.$on('signUp', users => {
this.allUsers.push(users)
})
}
}
</script>
allUsers 배열에 사용자들의 정보를 입력하고 v-for을 통하여 전체 사용자의 내용을 출력한다.
SignUp.vue에서 사용자 정보를 입력하면 그 또한 배열에 담아 내용을 출력해야 하니
EventBus를 통하여 정보를 받아와 push 하여 준다
src/components/Users/SignUp.vue
<template>
<div>
<h1>SignUp</h1>
<v-text-field
label="아이디"
v-model="userId"
></v-text-field>
<v-text-field
label="비밀번호"
type="password"
v-model="password"
></v-text-field>
<v-text-field
label="이름"
v-model="name"
></v-text-field>
<v-text-field
label="주소"
v-model="address"
></v-text-field>
<v-text-field
label="이미지"
v-model="src"
></v-text-field>
<v-btn @click="signUp">회원가입</v-btn>
</div>
</template>
<script>
import { EventBus } from '@/main.js'
export default {
data() {
return {
userId: null,
password: null,
name: null,
address: null,
src: null
}
},
methods: {
signUp() {
let userObj = {
userId: this.userId,
password: this.password,
name: this.name,
address: this.address,
src: this.src
}
EventBus.$emit('signUp', userObj)
this.clearForm()
},
clearForm() {
this.userId = null,
this.password = null,
this.name = null,
this.address = null,
this.src = null
}
}
}
</script>
아이디, 비밀번호 등 각종 정보들을 v-model을 통해 받아오고
입력받은 내용들을 하나의 객체로 만들어 준다
이는 AllUsers의 회원정보에 나와야 하니 EventBus를 통하여 객체를 넘겨준다
src/main.js
export const EventBus = new Vue()
EventBus를 사용하고 있으니 main.js에서 선언하여준다.
앞으로 이 예제를 통하여 Vuex 사용하는 법과 Axios와 통신하는 법 등으로 확장시킬 것이다
google에서 avatar를 받아오면 get 403 오류가 발생하는데 무슨 권한에 관한 오류인지 모르겠다
728x90