[Vue warn]: Error in beforeCreate hook: "ReferenceError: document is not defined"
[Vue warn]: Error in beforeCreate hook: "ReferenceError: document is not defined"
这可能不太可能,但我无法弄清楚出了什么问题。希望有人能给我一些指导。
我正在使用 vue 快速编辑插件 : https://github.com/A1rPun/vue-quick-edit 在我的 Nuxt 项目中。
有时我会弹出错误:
[Vue warn]: Error in beforeCreate hook: "ReferenceError: document is
not defined"
这似乎只在我第一次加载页面时发生(未经证实!),之后它再也不会发生(使用 ctrl+F5,以隐身方式加载,在另一个浏览器中尝试,...),它只是再也没有出现过,图书馆工作得很好。
但是,这让我对使用该库犹豫不决,因为我不确定错误来自何处以及它是否会影响我的最终用户。
这是我为使用内联可编辑字段而创建的组件:
<template>
<quick-edit
:aria-label="label"
@input="updateValue"
/>
</template>
<script>
import QuickEdit from 'vue-quick-edit'
export default {
components: { QuickEdit },
props: {
label: {
type: String,
required: true,
},
},
methods: {
updateValue (event) {
// do something
},
},
}
</script>
<style lang="scss" scoped>
</style>
这是因为Nuxt第一次在服务端渲染页面,所以document
确实没有在服务端定义。
您可以在 nuxt.config.js
中定义您的插件,并告诉 nuxt 仅在客户端中使用它:
在nuxt.config.js
中:
...
plugins: [
{ src: "~/plugins/quickEdit.js", ssr: false }
]
...
并在 ~/plugins/quickEdit.js
中:
import Vue from "vue";
import QuickEdit from 'vue-quick-edit'
Vue.use(QuickEdit);
然后在你的组件中使用它。
组件尝试访问 DOM 而 Nuxt 在服务器端渲染页面,解决方案是将其包装在 client-only
<template>
<client-only>
<quick-edit
:aria-label="label"
@input="updateValue"
/>
</client-only>
</template>
这可能不太可能,但我无法弄清楚出了什么问题。希望有人能给我一些指导。
我正在使用 vue 快速编辑插件 : https://github.com/A1rPun/vue-quick-edit 在我的 Nuxt 项目中。
有时我会弹出错误:
[Vue warn]: Error in beforeCreate hook: "ReferenceError: document is not defined"
这似乎只在我第一次加载页面时发生(未经证实!),之后它再也不会发生(使用 ctrl+F5,以隐身方式加载,在另一个浏览器中尝试,...),它只是再也没有出现过,图书馆工作得很好。
但是,这让我对使用该库犹豫不决,因为我不确定错误来自何处以及它是否会影响我的最终用户。
这是我为使用内联可编辑字段而创建的组件:
<template>
<quick-edit
:aria-label="label"
@input="updateValue"
/>
</template>
<script>
import QuickEdit from 'vue-quick-edit'
export default {
components: { QuickEdit },
props: {
label: {
type: String,
required: true,
},
},
methods: {
updateValue (event) {
// do something
},
},
}
</script>
<style lang="scss" scoped>
</style>
这是因为Nuxt第一次在服务端渲染页面,所以document
确实没有在服务端定义。
您可以在 nuxt.config.js
中定义您的插件,并告诉 nuxt 仅在客户端中使用它:
在nuxt.config.js
中:
...
plugins: [
{ src: "~/plugins/quickEdit.js", ssr: false }
]
...
并在 ~/plugins/quickEdit.js
中:
import Vue from "vue";
import QuickEdit from 'vue-quick-edit'
Vue.use(QuickEdit);
然后在你的组件中使用它。
组件尝试访问 DOM 而 Nuxt 在服务器端渲染页面,解决方案是将其包装在 client-only
<template>
<client-only>
<quick-edit
:aria-label="label"
@input="updateValue"
/>
</client-only>
</template>