안녕하세요, Yo플레입니다.
오늘은 vuejs의 vuex를 이용한 Component간 데이터 동기화를 해보겠습니다.
vuejs를 개발하다보면 Component간의 데이터 동기화가 필요한 때가 있습니다.
vuex를 통해 데이터를 동기화하면 되는데, 어떤 이유에서인지 데이터가 동기화가 안되는 경우가 있습니다.
이럴 때는 데이터흐름을 살펴보는것이 좋습니다.
<template>
<div id="app">
<h1>Case1</h1>
<CompA1 />
<CompA2 />
<h1>Case2</h1>
<CompB1 />
<CompB2 />
</div>
</template>
<script>
import CompA1 from "./components/CompA1";
import CompA2 from "./components/CompA2";
import CompB1 from "./components/CompB1";
import CompB2 from "./components/CompB2";
export default {
name: "App",
components: {
CompA1,
CompA2,
CompB1,
CompB2,
},
};
</script>
<style>
#app {
font-family: "Avenir", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
<template>
<div>
<input type="text" v-model="text" />
</div>
</template>
<script>
export default {
data() {
return {
text: "",
};
},
computed: {
getTextA() {
return this.$store.getters.getTextA;
},
},
watch: {
getTextA() {
this.text = this.getTextA;
},
text() {
this.$store.commit("SET_TEXT_A", this.text);
},
},
};
</script>
<template>
<div>
<input type="text" v-model="text" />
</div>
</template>
<script>
export default {
data() {
return {
text: "",
};
},
computed: {
getTextA() {
return this.$store.getters.getTextA;
},
},
watch: {
getTextA() {
this.text = this.getTextA;
},
text() {
this.$store.commit("SET_TEXT_A", this.text);
},
},
};
</script>
<template>
<div>
<!-- <p>{{ text }}</p> -->
<input type="text" v-model="text" @input="setText" />
</div>
</template>
<script>
export default {
data() {
return {
text: "",
};
},
computed: {
textB() {
return this.$store.getters.getTextB;
},
},
watch: {
textB() {
this.text = this.textB;
},
},
methods: {
setText() {
this.$store.commit("SET_TEXT_B", this.text);
},
},
};
</script>
<template>
<div>
<!-- <p>{{ text }}</p> -->
<input type="text" v-model="text" @input="setText" />
</div>
</template>
<script>
export default {
data() {
return {
text: "",
};
},
computed: {
textB() {
return this.$store.getters.getTextB;
},
},
watch: {
textB() {
this.text = this.textB;
},
},
methods: {
setText() {
this.$store.commit("SET_TEXT_B", this.text);
},
},
};
</script>
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from "vue";
import App from "./App";
import store from "./store";
Vue.config.productionTip = false;
/* eslint-disable no-new */
new Vue({
el: "#app",
store,
components: { App },
template: "<App/>"
});
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);
export default new Vuex.Store({
state: {
textA: "textA",
textB: "textB"
},
getters: {
getTextA(state) {
return state.textA;
},
getTextB(state) {
return state.textB;
}
},
mutations: {
SET_TEXT_A(state, payload) {
state.textA = payload;
},
SET_TEXT_B(state, payload) {
state.textB = payload;
}
},
actions: {}
});
라즈베리파이3에 키보드 모니터 없이 Wi-Fi 연결 설정 및 SSH 연결 (0) | 2021.02.05 |
---|---|
vuejs의 vuex에서 sessionStorage 사용법 (0) | 2021.01.17 |
vuejs의 arccordion 접기 기능 만들기 (0) | 2021.01.17 |
javascript array에서 object의 property 값으로 비교하여 정렬하기 (0) | 2020.12.13 |
Ubuntu 20.04.1 LTS에서 nvm, node.js, npm 설치와 제거하기 (0) | 2020.10.28 |
댓글 영역