如何理解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 26 Vue.js
vuex的数据渲染与修改浅析
Nov 26 Vue.js
Vue router传递参数并解决刷新页面参数丢失问题
Dec 02 Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
Vue实现摇一摇功能(兼容ios13.3以上)
Jan 26 Vue.js
手动实现vue2.0的双向数据绑定原理详解
Feb 06 Vue.js
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 Vue.js
Vue+TypeScript中处理computed方式
Apr 02 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
Vue 打包后相对路径的引用问题
Jun 05 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日历[测试通过]
2008/03/27 PHP
使用eAccelerator加密PHP程序
2008/10/03 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
PHP和MySql中32位和64位的整形范围是多少
2016/02/18 PHP
PHP反射API示例分享
2016/10/08 PHP
xml 与javascript结合的问题解决方法
2007/03/24 Javascript
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
Move.js入门
2017/02/08 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
Angular封装搜索框组件操作示例
2019/04/25 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
2020/12/19 Vue.js
vue仿携程轮播图效果(滑动轮播,下方高度自适应)
2021/02/11 Vue.js
wxPython学习之主框架实例
2014/09/28 Python
利用Python实现图书超期提醒
2016/08/02 Python
asyncio 的 coroutine对象 与 Future对象使用指南
2016/09/11 Python
python中pika模块问题的深入探究
2018/10/13 Python
Django错误:TypeError at / 'bool' object is not callable解决
2019/08/16 Python
利用python实现周期财务统计可视化
2019/08/25 Python
解决django FileFIELD的编码问题
2020/03/30 Python
python文件排序的方法总结
2020/09/13 Python
python3中TQDM库安装及使用详解
2020/11/18 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
找到不普通的东西:Bonanza
2016/10/20 全球购物
软件部经理岗位职责范本
2014/02/25 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
工作证明书
2015/06/15 职场文书
基于Redission的分布式锁实战
2022/08/14 Redis