让Vue也可以使用Redux的方法


Posted in Javascript onMay 23, 2018

上周末看Vuex源码,突发灵感,为什么都是Vuex啊。

于是蛋疼一下午写了一个插件来帮助Vue可以使用Redux

Gayhub Url

Vue-with-Redux

这是一个用于帮助Vue使用Redux管理状态的插件。Redux是一个非常流行的状态管理工具。vue-with-redux为大家提供一个可以在Vue环境下使用Redux的途径。这回带来不同的开发体验。

开始

首先你需要通过如下命令安装vue-with-redux

npm install -save vue-with-redux

运行Demo

git clone https://github.com/ryouaki/vue-with-redux.git
 npm install
 npm run serve

Usage

需要像下面这样改造你的入口文件:

// 有可能是你的entry.js文件
 ... // 这里是你引入的其它包
 import VuexRedux from 'vue-with-redux';
 import { makeReduxStore } from 'vue-with-redux';
 import reduces from 'YOUR-REDUCERS';
 import middlewares from 'REDUX-MIDDLEWARES';

 Vue.use(VuexRedux);

 let store = makeReduxStore(reduces, [middlewares]);

 new Vue({
 store,
 render: h => h(App)
 }).$mount('#app')

下面是一个actionCreate函数:

export function test() {
 return {
  type: 'TEST'
 }
 }

 export function asyncTest() {
 return (dispatch, getState) => {
  setTimeout( () => {
  console.log('New:', getState());
  dispatch({type: 'TEST'});
  console.log('Old', getState());
  }, 100);
 }
 }

Note: 你并不需要使用redux-thunk,因为Vue-with-Redux已经提供了对异步处理的支持.

这是一个reducer的例子:

function reduce (state = { count: 0 }, action) {
 switch(action.type) {
  case 'TEST':
  state.count++;
  return state;
  default:
  return state;
 }
 }

 export default {
 reduce
 };

Vue的组件例子:

<template>
 <div>
  <button @click="clickHandler1">Action Object</button>
  <button @click="clickHandler2">Sync Action</button>
  <button @click="clickHandler3">Async Action</button>
  <p>{{reduce.count}}</p>
 </div>
 </template>

 <script>
 import { test, asyncTest } from './../actions';

 export default {
 name: 'HelloWorld',
 props: {
  msg: String
 },
 // 你必须在这里预先定义你订阅的Redux中的状态。否则编译模版会报错。
 data() {
  return {
  reduce: {}
  }
 },
 methods: {
  clickHandler1() {
  this.dispatch({type: 'TEST'});
  },
  clickHandler2() {
  this.dispatch(test());
  },
  clickHandler3() {
  this.dispatch(asyncTest());
  },
  // 你必须实现一个mapReduxState函数,用于告诉Vue-with-Redux你需要订阅哪些redux中的状态
  // [ state ] 参数就是redux状态树的根。
  mapReduxState(state) { 
  return {
   reduce: state.reduce
  }
  },
 }
 }
 </script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 方法实现返回多个数据的代码
Apr 30 Javascript
JavaScript中的Function函数
Aug 27 Javascript
JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
Feb 26 Javascript
简单实现js拖拽效果
Jul 25 Javascript
React通过父组件传递类名给子组件的实现方法
Nov 13 Javascript
基于express中路由规则及获取请求参数的方法
Mar 12 Javascript
vue实现弹框遮罩点击其他区域弹框关闭及v-if与v-show的区别介绍
Sep 29 Javascript
详解React 服务端渲染方案完美的解决方案
Dec 14 Javascript
详解vue组件中使用路由方法
Feb 12 Javascript
一些可能会用到的Node.js面试题
Jun 15 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
微信小程序排坑指南详解
May 23 #Javascript
关于vue-router的那些事儿
May 23 #Javascript
基于Vue自定义指令实现按钮级权限控制思路详解
May 23 #Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 #Javascript
JavaScript+H5实现微信摇一摇功能
May 23 #Javascript
浅谈使用mpvue开发小程序需要注意和了解的知识点
May 23 #Javascript
vue动态路由配置及路由传参的方式
May 23 #Javascript
You might like
PHP 实现判断用户是否手机访问
2015/01/21 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
SAE实时日志接口SDK用法示例
2016/10/09 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
Ajax+Json 级联菜单实现代码
2009/10/27 Javascript
JS画线(实例代码)
2013/11/20 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
jQuery插件select2利用ajax高效查询大数据列表(可搜索、可分页)
2017/05/19 jQuery
JS实现前端页面的搜索功能
2018/06/12 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
JS实现字体背景跑马灯
2020/01/06 Javascript
js实现select下拉框选择
2020/01/11 Javascript
Vue绑定用户接口实现代码示例
2020/11/04 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
python创建线程示例
2014/05/06 Python
Python注释详解
2016/06/01 Python
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
python 伯努利分布详解
2020/02/25 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
简单了解如何封装自己的Python包
2020/07/08 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
python搜索算法原理及实例讲解
2020/11/18 Python
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
个人自我鉴定怎么写
2013/10/28 职场文书
见习期自我鉴定
2013/11/07 职场文书
市场营销管理制度
2014/01/29 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技
详解MySQL的内连接和外连接
2023/05/08 MySQL