Vuetify 탐색 드로어 v-modeled to Vuex
(비슷한 질문을 몇 가지 보았지만, 어느 것도 제 문제에 대처하지 못한 것 같습니다만, 뭔가 빠뜨린 것이 있으면 참조해 주세요.)
Vue, Vue, Vuetify를 사용하고 있습니다."Google Keep" 예제 레이아웃을 사용하여 NavDrawer와 AppBar 구성 요소를 고려했습니다.하지만 NavDrawer 토글을 작동시키는 데 문제가 있습니다.
Vuex를 구현하기 전에는 소품이나 이벤트를 사용하여 상위 컴포넌트를 살펴보았습니다.Vuex의 코드는 다음과 같습니다.
main.filename:
const store = new Vuex.Store({
state: {
drawerState: null
},
mutations: {
toggleDrawerState(state) {
state.drawerState = !state.drawerState
}
}
})
AppBar.vue:
<template>
<v-app-bar app clipped-left class="primary">
<v-app-bar-nav-icon @click="toggleDrawer()"/>
</v-app-bar>
</template>
<script>
export default {
name: 'AppBar',
methods: {
toggleDrawer: function() {
this.$store.commit('toggleDrawerState')
}
}
}
</script>
네비게이션 드로어vue:
<template>
<v-navigation-drawer v-model="drawerState" app clipped color="grey lighten-4">
<!-- content -->
</v-navigation-drawer>
</template>
<script>
export default {
name: 'NavigationDrawer',
computed: {
drawerState: {
get: function() { return this.$store.state.drawerState },
set: () => null
}
}
}
</script>
그set: () => null
NavDrawer의 계산된 속성에서는 처음에 변환을 호출하도록 설정했기 때문에 전환의 피드백 루프가 발생했기 때문입니다.
제 문제는 첫 번째가v-model
의 가치null
Vuetify에서는 데스크탑에서는 드로어가 열리고 모바일에서는 닫혀 있습니다.그리고 그 때drawerState = !drawerState
라고 불립니다.null
만들어졌다true
다만, 데스크탑에서는 드로어를 열어 둘 뿐이므로, 드로어를 닫으려면 버튼을 다시 클릭할 필요가 있습니다.초기 이중 트리거 문제가 발생한 후 데스크톱에서 정상적으로 작동합니다.그러나 모바일에서는 항상 두 가지 트리거가 필요합니다.(모바일이라고 하는데 브라우저 창의 크기를 줄였습니다.)크기를 조정할 때(또는 로드 시) 드로어가 자동으로 숨겨지지만 Vuex 스토어 부울을 업데이트할 방법이 없기 때문에 이중 트리거가 필요하기 때문일 수 있습니다.
따라서 Vuetify의 내비게이터를 다른 컴포넌트에서 전환하기 위해 구현하기 위한 표준 또는 베스트 프랙티스 방법은 무엇입니까?상태(열린 상태든 닫힌 상태든)가 직접 저장될 수 있다고 생각했지만 액세스하기 위한 "열린" 이벤트나 "닫힌" 이벤트가 없습니다(예: 이 질문에는 답이 없습니다).예시 페이지에서는 정상적으로 동작합니다만, 어떻게 하면 아이 컴포넌트로 동작하도록 조정할 수 있을까요?
감사합니다!
Vuex getters를 사용하여 계산한 getter에서 참조하고 계산한 setter에서 새 값을 검색하여 스토어에서 변환을 커밋하는 것이 좋습니다.따라서 스토어는 다음과 같이 됩니다.
const store = new Vuex.Store({
state: {
drawerState: false
},
mutations: {
toggleDrawerState (state, data) {
state.drawerState = data
}
},
getters : {
drawerState: (state) => state.drawerState
}
})
내비게이션 드로어 컴포넌트는 다음과 같습니다.
<template>
<v-navigation-drawer v-model="drawerState" app clipped color="grey lighten-4">
<!-- content -->
</v-navigation-drawer>
</template>
<script>
export default {
name: 'NavigationDrawer',
computed: {
drawerState: {
get () { return this.$store.getters.drawerState },
set (v) { return this.$store.commit('toggleDrawerState', v) }
}
}
}
</script>
다음은 완전한 예를 보여주는 코드펜입니다.https://codepen.io/JamieCurnow/pen/wvaZeRe
언급URL : https://stackoverflow.com/questions/60978985/toggling-vuetify-navigation-drawer-v-modelled-to-vuex-variable
'programing' 카테고리의 다른 글
Python: 목록에서 요소 찾기 (0) | 2022.09.19 |
---|---|
MySQL: 사용자가 존재하는지 확인한 후 삭제 (0) | 2022.09.19 |
MySQL에서 데이터베이스를 드롭하면 "Error droping database errno: 66"이 반환됩니다. (0) | 2022.09.19 |
Vue 2 목록에 새 항목 추가 (0) | 2022.09.19 |
사전의 문자열 표현을 사전으로 변환 (0) | 2022.09.19 |