当前位置: 首页 > 知识库问答 >
问题:

属性或方法"X"没有在vuex和vue路由器的实例上定义

齐航
2023-03-14

这个问题让我很恼火,我是Vue新手,我正在尝试制作一个简单的应用程序来练习。

现在我正在使用Vuex和Vue路由器,下面是代码:

路由文件非常简单,只是不在家的路由的懒负载。

import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'

Vue.use(Router)

export default new Router({
  mode: 'history',
  base: process.env.BASE_URL,
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/tracks',
      name: 'tracks',
      component: () => import(/* webpackChunkName: "about" */ './views/Tracks.vue')
    }
  ]
})

视图组件,它只渲染视图子对象

<template>
  <div id="tracks">
    <logo></logo>
    <search></search>
    <songs></songs>
  </div>
</template>

<script>
import Logo from '@/components/Logo.vue'
import Search from '@/components/Search.vue'
import Songs from '@/components/Songs.vue'

export default {
  name: 'tracks',
  components: { Logo, Search, Songs }
}
</script>

songs组件,这是我制作逻辑的容器(现在就列出东西)

<template>
  <section id="track-list" class="columns is-centered">
    <div class="column is-4" v-show="!songList.length">
      <div class="notification is-danger">
        No tracks loaded :(
      </div>
    </div>
  </section>
</template>

<script>
import { mapState } from 'vuex'
import SongCard from './SongCard.vue'

export default {
  name: 'songs',
  components: { SongCard },
  computed: {
    ...mapState([ 'songs' ])
  }
}
</script>

我认为问题出在渲染周期中,组件已装入,数据尚未加载,但这不是异步数据(至少不是我的),而是在状态下硬编码,初始化为空数组:

const state = {
  songList: [ ],
  song: null
}

// actions
const actions = {

}

// mutations
const mutations = {
  // [tracks.GET_TOP](state, payload) {},

  // [tracks.GET_TRACK](state, payload) {}
}

export default {
  namespaced: true,
  state,
  actions,
  mutations
}

因为我使用Vuex,所以我不使用data() {}key,否则我使用comated...我迷路了。

编辑,这里是完整的存储文件:

import Vue from 'vue'
import Vuex from 'vuex'

import artists from './modules/artists'
import songs from './modules/songs'

import actions from './actions'
import mutations from './mutations'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    artists,
    songs,
    countries: {
      state: {
        selected: 'Mexico',
        list: [
          { value: 'spain', name: 'España' },
          { value: 'mexico', name: 'México' },
          { value: 'argentina', name: 'Argentina' }
        ]
    }
    }
  },
  actions,
  mutations
})

共有1个答案

吉栋
2023-03-14

这里的主要问题是,歌曲不是一个状态,它是一个有名称空间的模块,因此不能像那样直接访问它。。。地图状态(['songs'])

要映射存储区的歌曲模块的状态,我们使用mapStatehelper语法,用于名称空间模块:

computed: {
  ...mapState('some/nested/module', {
    a: state => state.a,
    b: state => state.b
  })
}

因此,关于这个问题的正确语法是:

...mapState('songs', [ 'song', 'songList' ])

请注意,您也可以像上面的示例一样传递对象而不是数组。

有关更多信息,请参阅此。

 类似资料:
  • 我有以下Vuex商店(main.js): 我还为Vue路由器(routes.js)定义了以下路由: 我试图这样做,如果Vuex存储了对象,并且将属性设置为,则路由器会将用户重定向到登录页面。 我有这个: 问题是,我不知道如何从函数内部访问Vuex商店的对象。 我知道我可以在组件中使用来设置路由器保护逻辑,但这会使每个组件变得杂乱无章。我想在路由器级别集中定义它。

  • 使用vue 2、vue路由器2和vuex 2构建单页应用程序,但不更新 /src/main。js /src/路由器/索引。js /src/路由器/路由。js /src/store/index。js /src/view/index。vue /src/App。vue 我不知道代码有什么问题,

  • 我已经使用Vue CLI创建了一个Vue3应用程序,用Vuex和路由器创建我的应用程序。应用程序运行良好。 注意:我遵循了这个有用的文档,用于Vue3的Vuexhttps://blog.logrocket.com/using-vuex-4-with-vue-3/ 要求现在我想更改我的Vue3应用程序,使其具有服务器端渲染支持(即SSR)。 我观看了关于使用Vue3创建SSR应用程序的精彩视频:ht

  • 我正在尝试这样的东西 但是,当没有子路由的路由可以完美工作时,这段代码不起作用 我如何解决第一段代码?

  • 我正在浏览瑞克的角色 但我得到下面提到的错误,请帮我解决这个问题 错误1:[Vue警告]:属性或方法“列表”未在实例上定义,但在呈现期间引用。通过初始化属性,确保此属性在数据选项或基于类的组件中是反应性的。

  • 本文向大家介绍vue使用vuex实现首页导航切换不同路由的方法,包括了vue使用vuex实现首页导航切换不同路由的方法的使用技巧和注意事项,需要的朋友参考一下 vue实现首页导航切换不同路由的方式(二)【使用vuex实现的】,具体代码如下所示: css: js:  main.js代码: 效果图: 现在在这个页面里点击了解更多的时候跳转到新闻资讯页面,然后然后state里的值,然后改变当前的url以