如何理解Vue简单状态管理之store模式

 更新时间:2021年05月15日 14:19:32   作者:lovin  
状态管理也就是数据状态管理,vue应用程序的各组件之间经常需要进行通信,除了v-on、EventBus等通信方式外,可以采用数据共享的方式进行通信。这种简单的数据共享模式就是store模式。

概述

store 状态管理模式的实现思想很简单,就是定义一个 store 对象,对象里有 state 属性存储共享数据,对象里还存储操作这些共享数据的方法。在组件中将 store.state 共享数据作为 data 的一部分或全部,在对 store.state 对象里的共享数据进行改变时,必须调用 store 提供的接口进行共享数据的更改。

以下以一个简单 todo-list demo 来介绍 store 状态管理模式

1. 定义 store.js

//store.js
export const store = {
    state: {
        todos: [
            {text: '写语文作业', done: false},
            {text: '做数学卷子', done: false}
        ]
    },
    addTodo(str){
        const obj = {text: str, done: false}
        this.state.todos.push(obj)
    },
    setDone(index){
        this.state.todos[index].done = true
    }
}

2. 组件使用 store.js

//A.vue
<template>
    <div class="A">
        我是 A组件
       <ul>
           <li v-for="(todo,index) in todos" 
           :key="index" :class="todo.done?'done':''" @click="setDone(index)">
           {{todo.text}}
           </li>
       </ul>
    </div>
</template>

<script>
import {store} from '../store/store.js'
export default {
    name: 'A',
    data(){
        return store.state
    },
    methods: {
        setDone(index){
            store.setDone(index)
        }
    }
}
</script>

<style scoped>
.A{
    background: red;
    color: white;
    padding: 20px;
}
.A li.done{
    background: green;
}
</style>
//B.vue
<template>
    <div class="B">
        <div>
            我是 B 组件,在下方输入框输入任务在 A组件 中添加任务
        </div>
        <input type="text" v-model="text">
        <button @click="addTodo">add todo</button>
    </div>
</template>

<script>
import {store} from '../store/store.js'
export default {
    name: 'B',
    data(){
        return {
            text: ''
        }
    },
    methods:{
        addTodo(){
            if(this.text){
                store.addTodo(this.text)
            }
        }
    }
}
</script>

<style scoped>
.B{
    background: yellow;
    padding: 20px;
}
</style>
//App.vue
<template>
  <div id="app">
    <A />
    <B />
  </div>
</template>

<script>

import A from './components/A.vue'
import B from './components/B.vue'

export default {
  name: 'App',
  components: {
    A,
    B
  }
}
</script>

3. 实现效果

可以看到,在 A组件 中显示的数据,在 B组件 中进行添加和修改,就是通过数据共享的方式进行数据通信,简单的 store模式 就是这样的运用方式。

以上就是如何理解Vue简单状态管理之store模式的详细内容,更多关于Vue简单状态管理之store模式的资料请关注脚本之家其它相关文章!

相关文章

  • vue3触发父组件两种写法

    vue3触发父组件两种写法

    这篇文章主要介绍了vue3触发父组件两种写法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • 利用Vue.js制作一个拼图华容道小游戏

    利用Vue.js制作一个拼图华容道小游戏

    这篇文章主要为大家详细介绍了如何利用Vue.js编写一个拼图华容道游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 使用props传值时无法在mounted处理的解决方案

    使用props传值时无法在mounted处理的解决方案

    这篇文章主要介绍了使用props传值时无法在mounted处理的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 解决vue+router路由跳转不起作用的一项原因

    解决vue+router路由跳转不起作用的一项原因

    这篇文章主要介绍了解决vue+router路由跳转不起作用的一项原因,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Vue倒计时3秒后返回首页Demo(推荐)

    Vue倒计时3秒后返回首页Demo(推荐)

    这篇文章主要介绍了Vue倒计时3秒后返回首页Demo,倒计时结束后要清除计时器,防止内存泄漏,本文通过示例代码给大家介绍的非常详细,需要的朋友参考下吧
    2023-11-11
  • vue css 引入asstes中的图片无法显示的四种解决方法

    vue css 引入asstes中的图片无法显示的四种解决方法

    这篇文章主要介绍了vue css 引入asstes中的图片 无法显示的几种解决方案,本文给出了四种解决方法,每种方法给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • vue+elementui(对话框中form表单的reset问题)

    vue+elementui(对话框中form表单的reset问题)

    这篇文章主要介绍了vue+elementui(对话框中form表单的reset问题),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Vue3中使用Element-Plus的el-upload组件限制只上传一个文件的功能实现

    Vue3中使用Element-Plus的el-upload组件限制只上传一个文件的功能实现

    在 Vue 3 中使用 Element-Plus 的 el-upload 组件进行文件上传时,有时候需要限制只能上传一个文件,本文将介绍如何通过配置 el-upload 组件实现这个功能,让你的文件上传变得更加简洁和易用,需要的朋友可以参考下
    2023-10-10
  • Vue实现滑动验证功能

    Vue实现滑动验证功能

    这篇文章主要为大家详细介绍了Vue实现滑动验证功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • vue-cli实现多页面多路由的示例代码

    vue-cli实现多页面多路由的示例代码

    本篇文章主要介绍了vue-cli实现多页面多路由的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01

最新评论