๐ Vue.Observable?
Vue 2.6
๋ฒ์ ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ์ผ๋ก ๋ง๋ค์ด ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๊ฒผ์ต๋๋ค.
์ด๋ฒ ํฌ์คํธ์์๋ ์ด๋ฅผ ํ์ฉํ ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ๋ํด์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๐ Store ํจํด ์ฌ์ฉํด๋ณด๊ธฐ
๊ฐ๋จํ counter
์ฑ์ ํตํด์ Vue.observable
์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ๋ค์๊ณผ ๊ฐ์ด count
๊ฐ์ ๊ฐ์ง๊ณ ์๋ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํฉ๋๋ค.
๋ฒํผ์ ํด๋ฆญํ๋ฉด count
๊ฐ 1์ฉ ์ฆ๊ฐํ๋ ์์ ์
๋๋ค.
<template>
<div>
{{ count }}
<button @click="onClick">ํด๋ฆญ</button>
</div>
</template>
<script>
export default {
data() {
return {
count: 0,
}
},
methods: {
onClick() {
this.count += 1
},
},
}
</script>
ํ์ฌ ์ปดํฌ๋ํธ ์ํ ๊ฐ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์๋ count
๊ฐ์ ์ ์ญ์์ ๊ด๋ฆฌํ๋๋ก ๋ณ๊ฒฝํ๊ฒ ์ต๋๋ค.
๋จผ์ store
๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ index.js
ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
import Vue from "vue"
export const mapState = (state, properties = []) => {
const computed = {}
properties.forEach((prop) => (computed[prop] = () => state[prop]))
return computed
}
export const state = Vue.observable({
count: 0,
})
export const mutations = {
increaseCount() {
state.count += 1
},
}
mapState
๋ store
์ ์ ์๋์ด์๋ ์ํ ๊ฐ์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ์
computed
์์ฑ์ ๊ฐ์ ๋ฐํํ๋ ํจ์๋ฅผ ๋งคํํด์ฃผ๋ ํฌํผ ํจ์์
๋๋ค.
์ด๋ store
์ state
์ ๋ํ ์ง์ ์ ์ธ ์ ๊ทผ ๋ฐ ์์ ์ ํผํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์
๋๋ค.
state
๋ Vue.observable
์ ํตํด ๋ฐํ๋ ๋ฐ์ํ ๊ฐ์ฒด์ด๋ฉฐ
์ด๋ฅผ ์กฐ์ํ๋ mutations
๋ ํจ๊ป ์ ์ํ์ต๋๋ค.
(๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก actions
๋ getters
๋ ์ ์ ๊ฐ๋ฅํฉ๋๋ค ๐.)
์ด์ ๊ธฐ์กด์ ์ปดํฌ๋ํธ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
count
๋ฅผ ์ ์ญ ์ํ๋ก ์ฎ๊ฒผ์ ๋ฟ, ๋์ผํ๊ฒ ๋์ํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
<template>
<div>
{{ count }}
<button @click="onClick">ํด๋ฆญ</button>
</div>
</template>
<script>
import { state, mapState, mutations, } from "../store"
export default {
computed: {
...mapState(state, ["count"]),
},
methods: {
onClick() {
mutations.increaseCount()
},
},
}
</script>
๐ ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์๊น?
๊ทธ๋ ๋ค๋ฉด ์ด๋ค ๊ฒฝ์ฐ์ Vue.observable
๋ฅผ ์ฌ์ฉํด์ ์ํ ๊ด๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด ์ข์๊น์?
๊ท๋ชจ๊ฐ ํฌ๊ฑฐ๋ ํ์ฅ๋ ๊ฒ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์
์์๋ Vuex
๋ Pinia
์ ๊ฐ์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ
์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๋ค์ ๋๊ท๋ชจ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ ๋ชจ๋ํ์ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ ์ง๋ง ์์ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์
์์๋ ๊ตณ์ด Vuex
์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ด์ฉํด์ ์ํ ๊ด๋ฆฌ๋ฅผ ํ ํ์๋ ์์ต๋๋ค.
์ด๋ boilerplate ์ฝ๋๋ก ์ธํด ์คํ๋ ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋ ๋ณต์ก๋๋ฅผ ๋์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋๋ฌธ์ ๋ฐ์ดํฐ์ ํ๋ฆ์ด ๊ฐ๋จํ๊ฑฐ๋, ๊ท๋ชจ๊ฐ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์์๋
Vue.observable
๋ก๋ ์ถฉ๋ถํ ์ํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๐ ์ฐธ๊ณ ์๋ฃ
Home Rolled Store with Vue.observable (Vue 2) - Vue.js Tutorials
'๐ archive' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Vue.js ์ํ๊ด๋ฆฌ 3ํธ] Vuex ์ธ์ , ์ด๋ป๊ฒ ์จ์ผํ ๊น? (0) | 2022.03.07 |
---|---|
[Vue.js ์ํ๊ด๋ฆฌ 2ํธ] Vuex ๋ฅผ ์ด์ฉํ ์ํ ๊ด๋ฆฌ (0) | 2022.03.07 |
[Vue.js] $el ์ต์ ์ ๋ฌด์์ผ๊น? (0) | 2022.03.01 |
[Vue.js] ์์์ ํจ๊ป ๋ณด๋ ๋์ ์ปดํฌ๋ํธ (0) | 2022.03.01 |
[Vue.js] computed ์์ฑ ์ฌ์ฉ ์ ์ฃผ์ํ ์ ๋ค (0) | 2022.02.23 |
๐ฌ ๋๊ธ