如何理解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自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 Vue.js
vue element-ul实现展开和收起功能的实例代码
Nov 25 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
vue3.0自定义指令(drectives)知识点总结
Dec 27 Vue.js
vue中watch的用法汇总
Dec 28 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
关于Vue Router的10条高级技巧总结
May 06 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
vue @ ~ 相对路径 路径别名设置方式
Jun 05 Vue.js
VUE递归树形实现多级列表
Jul 15 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
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
jQuery版Tab标签切换
2011/03/16 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
2012/07/26 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
ECMAScript6函数默认参数
2015/06/12 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
基于js中this和event 的区别(详解)
2017/10/24 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
2019/09/19 Javascript
详解JavaScript修改注册表的方法
2020/01/05 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python定时器使用示例分享
2014/02/16 Python
python logging类库使用例子
2014/11/22 Python
Python给你的头像加上圣诞帽
2018/01/04 Python
浅析Python四种数据类型
2018/09/26 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
解决Windows下python和pip命令无法使用的问题
2020/08/31 Python
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
Unix/Linux开发面试题
2016/08/16 面试题
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
运动会入场词
2015/07/18 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书