반응형
V-bind 스토어 상태 변경 시 클래스를 업데이트하지 않음
나는 Vue와 Nuxt를 처음 봐.나는 정신을 차리려고 노력하고 있다.$store
s
나는 국가 오브젝트를 만들어 단순 부울인 속성을 부여했다.그 속성의 유무에 따라 요소에 클래스를 추가하고 싶다.true
내가 이 상점을 만든 방법은 다음과 같다.
const store = () => {
return new Vuex.Store({
state: {
foo: "You got the global state!",
userSidebarVisible: true
},
})
}
나의vue
파일에는 다음과 같은 항목이 있다.
<template>
<div>
<div>Hello!</div>
<button v-on:click="showSidebar">Click</button>
<div v-bind:class="{active: userSidebarVisible}">the sidebar</div>
<div>{{$store.state.userSidebarVisible}}</div>
</div>
</template>
<script>
export default {
data: function() {
return {
userSidebarVisible: this.$store.state.userSidebarVisible,
}
},
methods: {
showSidebar: function() {
if (this.$store.state.userSidebarVisible === true) {
this.$store.state.userSidebarVisible = false;
} else {
this.$store.state.userSidebarVisible = true;
}
}
}
}
</script>
클릭할 때button
그active
클래스가 토글되지 않지만 마지막 텍스트<div>
최신 정보를 얻을 수 있다.내가 여기서 뭘 잘못하고 있는지 궁금하다.로컬 데이터 속성과 동일한 작업을 수행하는 것이 의도한 대로 작동하는 것 같다.
우선, 당신은 그 사실을 바꾸면 안 된다.$store
돌연변이를 피하다
업데이트를 위해 스토어에 돌연변이 방법을 추가해야 함userSidebarVisible
:
state: {
userSidebarVisible: true
},
mutations: {
SET_USER_SIDEBAR_VISIBLE(state, value) {
state.userSidebarVisible = value;
}
}
둘째, Vue 인스턴스의 데이터가 상태 데이터를 반영하도록 하려면userSidebarVisible
getter 및 setter 함수가 있는 계산 속성:
computed: {
userSidebarVisible: {
get() {
return this.$store.state.userSidebarVisible;
},
set(value) {
this.$store.commit('SET_USER_SIDEBAR_VISIBLE', value);
}
}
}
예를 들면 다음과 같다.
const store = new Vuex.Store({
state: {
userSidebarVisible: true
},
mutations: {
SET_USER_SIDEBAR_VISIBLE(state, value) {
state.userSidebarVisible = value;
}
}
})
new Vue({
el: '#app',
store,
computed: {
userSidebarVisible: {
get() {
return this.$store.state.userSidebarVisible;
},
set(value) {
this.$store.commit('SET_USER_SIDEBAR_VISIBLE', value);
}
}
},
methods: {
toggleSidebar() {
this.userSidebarVisible = !this.userSidebarVisible;
}
}
})
.active {
color: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/2.4.0/vuex.min.js"></script>
<div id="app">
<button v-on:click="toggleSidebar">Click</button>
<div v-bind:class="{active: userSidebarVisible}">the sidebar</div>
<div>Global state: {{$store.state.userSidebarVisible}}</div>
<div>Vue instance state: {{userSidebarVisible}}</div>
</div>
참조URL: https://stackoverflow.com/questions/46412905/v-bind-not-updating-class-on-store-state-change
반응형
'IT이야기' 카테고리의 다른 글
스티커 헤더 도구 모음 설정 (0) | 2022.04.23 |
---|---|
v-for 및 v-model을 사용한 vuex 계산 속성이 포함된 Vue js (0) | 2022.04.23 |
Vue를 사용하여 API를 사용한 일괄 업데이트 (0) | 2022.04.23 |
복잡한 선언문을 읽기 쉬운 규칙? (0) | 2022.04.23 |
C에서 C++ 함수를 호출하는 방법은? (0) | 2022.04.23 |