페이지 로드 시 컴포넌트 '마운트'가 두 번 발생합니다.
페이지에서 컴포넌트를 로드하는 매우 이상한 오류가 발생했습니다.mounted
그리고.beforeMount
발화/실행 두 번?각 컴포넌트는 페이지를 나타내므로 페이지를 로드하면mywebsite.com/contact
그Contact.vue
기능들mounted
그리고.beforeMount
페이지를 로딩하면 두 번 실행/실행합니다.mywebsite.com/foo
그Contact.vue
기능들mounted
그리고.beforeMount
(제가 생각하는 것은) 한 번 발화/실행한 적이 있습니까?발생할 수 있습니다).
이 기능이 왜 두 번 실행되는지 아십니까?설정이 조금 까다롭지만 동적 템플릿에 적합합니다.
router/index.js
:
const router = new Router({
routes: [
{
path: (window.SETTINGS.ROOT || '') + '/:slug',
name: 'Page',
component: Page,
props: true
},
]
})
Page.vue:
<template>
<component v-if="wp" :is="templateComponent" v-bind:wp="wp"></component>
<p v-else>Loading...</p>
</template>
<script type="text/javascript">
import { mapGetters } from 'vuex'
import * as Templates from './templates'
// Map templates
let templateCmps = {}
_.each(Templates, cmp => {
templateCmps[cmp.name] = cmp
})
export default {
props: ["slug"],
components: {
...templateCmps
// Example:
// 'default': Templates.Default,
// 'contact': Templates.Contact,
// 'home': Templates.Home,
},
computed: {
...mapGetters(['pageBySlug']),
wp() {
return this.pageBySlug(this.slug);
},
templateComponent() {
let template = 'default' // assign default template
if (!_.isNull(this.wp.template) && this.wp.template.length)
template = this.wp.template.replace('.php','').toLowerCase()
return template
}
},
created() {
this.$store.dispatch('getPageBySlug', { slug: this.slug })
}
}
</script>
연락.vue:
<template>
<main></main>
</template>
<script type="text/javascript">
export default {
name: 'contact',
mounted() {
console.log('Contact::mounted') // this outputs twice
},
beforeMount() {
console.log('Contact::beforeMount') // this outputs twice
}
}
</script>
나도 비슷한 문제가 있었다.이 문제는 100% 확신할 수 없지만, 제 생각에는vuex
.Vuex
내부적인 예를 가지고 있다Vue
(여기서 작성된 함수는 에서 호출됩니다).제가 의심하는 것은 이 내부 사례가Vue
는 일부 컴포넌트를 재작성하여 해당 컴포넌트의 라이프 사이클이벤트를 여러 번 트리거합니다.
에 없는 경우vuex
, 여러 개의 instance를 만들고 있을 가능성이 있습니까?Vue
(즉,new Vue({})
앱에 저장해당신의 앱에?또는 프라이머리의 원인이 되는 코드가 있습니까?Vue
인스턴스 또는Contact
컴포넌트를 여러 번 초기화해야 합니까?그게 원인이 될 수 있다는 생각뿐입니다.
언급URL : https://stackoverflow.com/questions/50046304/component-mounted-fires-twice-on-page-load
'programing' 카테고리의 다른 글
vuex 디스패치 응답 처리 방법 (0) | 2022.08.28 |
---|---|
Nuxt Apollo 로컬 상태를 사용하여 Vuex를 완전히 대체할 수 있습니까? (0) | 2022.08.28 |
Vue.js - V-For에서 여러 소품을 자녀에게 전달 (0) | 2022.08.28 |
Quasar-Framework를 사용하여 상단 메뉴 모음을 작성하는 방법 (0) | 2022.08.28 |
모든 데이터를 vuex 또는 redux에 저장하는 것이 좋습니까? (0) | 2022.08.28 |