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


Posted in Vue.js onMay 15, 2021

概述

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. 实现效果

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

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

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

Vue.js 相关文章推荐
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
vue3.0中setup使用(两种用法)
Dec 02 Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
vue实现滚动鼠标滚轮切换页面
Dec 13 Vue.js
vue element el-transfer增加拖拽功能
Jan 15 Vue.js
vue实现简易计算器功能
Jan 20 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
vue中三级导航的菜单权限控制
Mar 31 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
vue响应式原理与双向数据的深入解析
Jun 04 Vue.js
Vue3实现简易音乐播放器组件
Aug 14 Vue.js
Vue如何实现组件间通信
May 15 #Vue.js
详解Vue的sync修饰符
May 15 #Vue.js
深入理解Vue的数据响应式
May 15 #Vue.js
详解Vue的options
May 15 #Vue.js
vue实现无缝轮播效果(跑马灯)
May 14 #Vue.js
Vue接口封装的完整步骤记录
Vue全家桶入门基础教程
You might like
咖啡店都有些什么常规豆子呢?有什么风味在里面
2021/03/04 咖啡文化
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
Jquery删除css属性的简单方法
2016/12/04 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
2018/02/08 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
对python中的argv和argc使用详解
2018/12/15 Python
Python使用pymongo库操作MongoDB数据库的方法实例
2019/02/22 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
keras多显卡训练方式
2020/06/10 Python
Python request中文乱码问题解决方案
2020/09/17 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
土耳其国际性时尚购物网站:Modanisa
2018/01/19 全球购物
自我鉴定书范文
2013/10/02 职场文书
护士自荐信
2013/10/25 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
Vue操作Storage本地化存储
2022/04/29 Vue.js