如何理解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 router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
vue3.0实现插件封装
Dec 14 Vue.js
vue实现登录功能
Dec 31 Vue.js
vue监听键盘事件的相关总结
Jan 29 Vue.js
开发一个封装iframe的vue组件
Mar 29 Vue.js
解读Vue组件注册方式
May 15 Vue.js
vue-cli4.5.x快速搭建项目
May 30 Vue.js
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
Vue全局事件总线你了解吗
Feb 24 Vue.js
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
Apr 11 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初学者的8点有效建议
2010/11/20 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
js强制把网址设为默认首页
2015/09/29 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
JavaScript实现修改伪类样式
2017/11/27 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
python直接访问私有属性的简单方法
2016/07/25 Python
Python中一行和多行import模块问题
2018/04/01 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
浅谈tensorflow1.0 池化层(pooling)和全连接层(dense)
2018/04/27 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
生产部主管岗位职责
2014/01/06 职场文书
婚假请假条怎么写
2014/04/10 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
求职简历自我评价怎么写
2015/03/10 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Mysql将字符串按照指定字符分割的正确方法
2022/05/30 MySQL
python自动获取微信公众号最新文章的实现代码
2022/07/15 Python