让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和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
Dec 14 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
Aug 15 Javascript
jquery validate表单验证的基本用法入门
Jan 18 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
Mar 07 Javascript
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
详解Eslint 配置及规则说明
Sep 10 Javascript
详解Node.js异步处理的各种写法
Jun 09 Javascript
javascript实现导航栏分页效果
Jun 27 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 Javascript
Vue 请求传公共参数的操作
Jul 31 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中文字符截取防乱码
2008/03/28 PHP
初学CAKEPHP 基础教程
2009/11/02 PHP
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
php笔记之:数据类型与常量的使用分析
2013/05/14 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
Thinkphp框架开发移动端接口(1)
2016/08/18 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
webpack打包单页面如何引用的js
2017/06/07 Javascript
js canvas实现简单的图像扩散效果
2020/06/28 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
Vue实现base64编码图片间的切换功能
2019/12/04 Javascript
js实现圆形显示鼠标单击位置
2020/02/11 Javascript
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
pycharm 使用心得(四)显示行号
2014/06/05 Python
python实现简单的TCP代理服务器
2014/10/08 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
python使用建议与技巧分享(二)
2020/08/17 Python
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
德国足球商店:OUTFITTER
2019/05/06 全球购物
民主生活会意见
2015/06/05 职场文书
小平小道观后感
2015/06/09 职场文书
捐书仪式主持词
2015/07/04 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers