[Vue 警告]:属性或方法“stateSidebar”未在实例上定义,但在渲染期间被引用

Posted

技术标签:

【中文标题】[Vue 警告]:属性或方法“stateSidebar”未在实例上定义,但在渲染期间被引用【英文标题】:[Vue warn]: Property or method "stateSidebar" is not defined on the instance but referenced during render 【发布时间】:2021-08-13 22:15:40 【问题描述】:

我知道这似乎是一个很容易找到的问题,但我的代码前段时间有效。我正在使用 Vuex 绑定来检查我的侧边栏是否应该可见,所以应该在我的整个项目中设置 stateSidebar

default.vue

<template>
  <div>
    <TopNav />
    <SidebarAuth v-if="stateSidebar" />
    <Nuxt />
  </div>
</template>

<script>
import TopNav from './partials/TopNav';
import SidebarAuth from './partials/SidebarAuth';

export default 
  components: 
    TopNav,
    SidebarAuth
  ,
  methods: 
    setStateSidebar(event, state) 
      this.$store.dispatch('sidebar/setState', state)
    
  

</script>

store/sidebar.js

export const state = () => (
  stateSidebar: false
);

export const getters = 
  stateSidebar(state) 
    return state.stateSidebar;
  
;

export const mutations = 
  SET_SIDEBAR_STATE(state, stateSidebar) 
    state.stateSidebar = stateSidebar;
  
;

export const actions = 
  setState( commit , stateSidebar) 
    commit('SET_SIDEBAR_STATE', stateSidebar);
  ,
  clearState( commit ) 
    commit('SET_SIDEBAR_STATE', false);
  
;

plugins/mixins/sidebar.js

import Vue from 'vue';

import  mapGetters  from 'vuex';

const Sidebar = 
  install(Vue, options) 
    Vue.mixin(
      computed: 
        ...mapGetters(
          stateSidebar: 'sidebar/stateSidebar'
        )
      
    )
  


Vue.use(Sidebar);

nuxt.config.js

 plugins: ["./plugins/mixins/validation", "./plugins/axios", "./plugins/mixins/sidebar"],

【问题讨论】:

...mapGetters(stateSidebar: 'sidebar/stateSidebar') 应该在 default.vue 中 @BülentAkgül 实际上我只是通过重新保存nuxt.config.js 文件来修复它。我不知道是什么导致了这个问题。我正在使用 Github,它告诉我:No content changes found. 【参考方案1】:

如果你正在创建一个 mixin,它应该在 /mixins 比如/mixins/my-mixin.js

export default 
  // vuex mixin

然后在default.vue中这样导入

<script>
import myMixin from '~/mixins/my-mixin`

export default 
  mixins: [myMixin],


这不是plugins 应该用于的。 IMO,你应该明确地在这里做一些更简单和更短的东西,使用更少的样板,并且不会在 vue3(mixins)中被弃用。

这是 IMO 推荐的使用方式

<template>
  <div>
    <TopNav />
    <SidebarAuth v-if="stateSidebar" />
    <Nuxt />
  </div>
</template>

<script>
import  mapState  from 'vuex'

export default 
  computed: 
    ...mapState('sidebar', ['stateSidebar']) // no need to use object syntax nor a getter since you're just fetching the state here
  ,

</script>

没有mixin,没有插件入口。

【讨论】:

以上是关于[Vue 警告]:属性或方法“stateSidebar”未在实例上定义,但在渲染期间被引用的主要内容,如果未能解决你的问题,请参考以下文章

[Vue 警告]:属性或方法“游戏”未在实例上定义,但在渲染期间引用

[Vue 警告]:属性或方法未在实例上定义,但在渲染期间引用

为啥我看到 Vue 警告:“属性或方法“msg”未在实例上定义,但在渲染期间被引用...”

Vue警告:属性或方法“item”未在实例上定义,但在渲染期间被引用

[Vue 警告]:属性或方法“hp”未在实例上定义,但在渲染期间引用

错误:vue.js:634 [Vue 警告]:属性或方法“项目”未在实例上定义,但在渲染期间被引用