SPQ*_*Inc 5 vue.js vue-component vuex vuejs3
我需要解决的问题:我正在编写一个基于VueJS3的小vue-app。
我有很多不同的侧边栏,我需要防止同时打开多个侧边栏的情况。
为了存档这个我正在关注这篇文章。
现在我遇到了一个问题:
Vue 接收到一个 Component,该 Component 被制成响应式对象。这可能会导致不必要的性能开销,应该通过用 标记组件
markRaw或使用shallowRef代替 来避免ref。(6)
这是我的代码:
SlideOvers.vue
<template>
<component :is="component" :component="component" v-if="open"/>
</template>
<script>
export default {
name: 'SlideOvers',
computed: {
component() {
return this.$store.state.slideovers.sidebarComponent
},
open () {
return this.$store.state.slideovers.sidebarOpen
},
},
}
</script>
Run Code Online (Sandbox Code Playgroud)
UserSlideOver.vue
<template>
<div>test</div>
</template>
<script>
export default {
name: 'UserSlideOver',
components: {},
computed: {
open () {
return this.$store.state.slideovers.sidebarOpen
},
component () {
return this.$store.state.slideovers.sidebarComponent
}
},
}
</script>
Run Code Online (Sandbox Code Playgroud)
slideovers.js(vuex 商店)
import * as types from '../mutation-types'
const state = {
sidebarOpen: false,
sidebarComponent: null
}
const getters = {
sidebarOpen: state => state.sidebarOpen,
sidebarComponent: state => state.sidebarComponent
}
const actions = {
toggleSidebar ({commit, state}, component) {
commit (types.TOGGLE_SIDEBAR)
commit (types.SET_SIDEBAR_COMPONENT, component)
},
closeSidebar ({commit, state}, component) {
commit (types.CLOSE_SIDEBAR)
commit (types.SET_SIDEBAR_COMPONENT, component)
}
}
const mutations = {
[types.TOGGLE_SIDEBAR] (state) {
state.sidebarOpen = !state.sidebarOpen
},
[types.CLOSE_SIDEBAR] (state) {
state.sidebarOpen = false
},
[types.SET_SIDEBAR_COMPONENT] (state, component) {
state.sidebarComponent = component
}
}
export default {
state,
getters,
actions,
mutations
}
Run Code Online (Sandbox Code Playgroud)
App.vue
<template>
<SlideOvers/>
<router-view ref="routerView"/>
</template>
<script>
import SlideOvers from "./SlideOvers";
export default {
name: 'app',
components: {SlideOvers},
};
</script>
Run Code Online (Sandbox Code Playgroud)
这就是我尝试切换一个幻灯片的方法:
<template>
<router-link
v-slot="{ href, navigate }"
to="/">
<a :href="href"
@click="$store.dispatch ('toggleSidebar', userslideover)">
Test
</a>
</router-link>
</template>
<script>
import {defineAsyncComponent} from "vue";
export default {
components: {
},
data() {
return {
userslideover: defineAsyncComponent(() =>
import('../../UserSlideOver')
),
};
},
};
</script>
Run Code Online (Sandbox Code Playgroud)
ton*_*y19 10
根据警告的建议,使用markRaw的值usersslideover来解决警告:
export default {
data() {
return {
userslideover: markRaw(defineAsyncComponent(() => import('../../UserSlideOver.vue') )),
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6345 次 |
| 最近记录: |