Vue:如何将 store 与组件一起使用?

Posted

技术标签:

【中文标题】Vue:如何将 store 与组件一起使用?【英文标题】:Vue: How to use store with component? 【发布时间】:2017-01-26 01:15:37 【问题描述】:

//存储

export default 
  state: 
    aboutModels: []
  ,
  actions: 
    findBy: (commit, about)=> 
      //do getModels
      var aboutModels = [name: 'About'] //Vue.resource('/abouts').get(about)
      commit('setModels', aboutModels)
    
  ,
  getters: 
    getModels(state)
      return state.aboutModels
    
  ,
  mutations: 
    setModels: (state, aboutModels)=> 
      state.aboutModels = aboutModels
    
  

//组件

import mapActions, mapGetters from "vuex";

export default 
  name: 'About',
  template: require('./about.template'),
  style: require('./about.style'),
  created () 
    document.title = 'About'
    this.findBy()
  ,
  computed: mapGetters(
    abouts: 'getModels'
  ),
  methods: mapActions(
    findBy: 'findBy'
  )

//查看

<div class="about" v-for="about in abouts">about.name</div>

//错误

vue.js:2532[Vue warn]: Cannot use v-for on stateful component root element because it renders multiple elements:
<div class="about" v-for="about in abouts">about.name</div>

vue.js:2532[Vue warn]: Multiple root nodes returned from render function. Render function should return a single root node. (found in component <About>)

【问题讨论】:

【参考方案1】:

您正在正确映射您的 Vuex 状态获取器和操作。正如您的错误消息所述,您的问题是其他问题...

在您的组件模板中,您不能在根元素上使用v-for 指令。例如,这是不允许的,因为您的组件可以有多个根元素:

<template>
   <div class="about" v-for="about in abouts">about.name</div>
</template>

改为这样做:

<template>
   <div>
      <div class="about" v-for="about in abouts">about.name</div>
   </div>
</template>

** *修复模板标签中的错字**

【讨论】:

以上是关于Vue:如何将 store 与组件一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 TypeScript 与 Vue.js 和单文件组件一起使用?

vuejs2:如何将 vuex 存储传递给 vue-router 组件

如何配置 laravel-mix 以便能够将 @material 与 vue.js 一起使用

是否可以将 Vue 3 与组合 API 和 vue 类组件一起使用?

Axios Vue.js 将对象数组从 store.js 传递给组件

将 Typescript 与 Laravel 和 Vue.js 一起使用,导入不使其成为 Vue 组件?