Redux 是什么

1,450 阅读2分钟

每当我们谈及到 redux,大家都会说是 react 的状态管理工具。这么说确实没错,毕竟 redux 项目也是 React Community 组织下的一个子项目。而且 redux 的诞生也是和 react 这个 ui 库急需一个状态管理解决方案有很大的联系。但是 redux 和 react 并没有任何的耦合。虽然它们经常一起用,但是 redux 的用途并不局限于 react,或者说,和 react 的结合只是 redux 的使用方式之一。

那么撇开 react 不谈, redux 到底是什么呢?我们看一下这个例子。

在实际的开发当中,我们可能会碰到这样的需求:监听一个事件,当事件触发的时候,我们可以做一些想做的事情。

const cat = {
  name: 'youtiao',
  age: 1,
  weight: 6
};

// 监听 'update_weight' 事件
events.on('update_weight', weight => {
  if (weight > cat.weight) {

    // 没错,要做的事情就是无情的嘲讽
    console.log('哈哈哈,你又长胖了!!');
    cat.weight = weight;
  }
});

// 触发 'update_weight' 事件
events.trigger('update_weight', { weight: 8 });

// 查看改变之后的 cat
console.log(cat);

开源社区有很多库可以完成这样的需求,当然,这里是讲 redux 的,按照剧本走,我们肯定用 redux 来做啦。

const { createStore } = require('redux');

// 监听事件
const listener = (oldCat, action) => {

  // 注册 'update_weight' 事件
  if (action.type === 'update_weight') {
    
    // 当新的 weight 大于旧的 weight 时
    if (action.weight > oldCat.weight) {
      console.log('哈哈哈,你又长胖了!!');
      const newCat = Object.assign({}, oldCat, { weight: action.weight });
      return newCat;
    }
  }
  return oldCat;
};

// 绑定监听事件到 cat 对象上
const store = createStore(listener, cat);

// 触发 'update_weight' 事件
store.dispatch({ type: 'update_weight', weight: 8 });

// 查看触发事件之后的 cat 对象
console.log(store.getState());
// 哈哈哈,你又长胖了!!
// { name: 'youtiao', age: 1, weight: 8 }

但是!!!redux 是一门很讲究的库,虽然上面的例子跑起来没有任何问题,但是有一件事情 -- 嘲讽console.log('哈哈哈,你又长胖了!!'),不应该放在 listener 里面做。而是应该放到 redux 中间件里去做。至于什么是 redux 中间件为什么要这么麻烦,我觉得可以在后面的文章中再和大家探讨一下,同时也欢迎大家在评论区提出自己的意见和建议。

好,看完这个例子,大家知道 redux 是什么了吗?emmm,其实我也不知道 redux 是什么,反正我知道了它可以用来做什么事情。就像一个扳手🔧,它创造出来是用来拧螺丝的,也许这是它最擅长的。但是谁说不能用扳手来砸核桃呢,或者当装饰,甚至当武器也可以呀~

代码地址: Redux 是什么,直接控制台运行 node ./demo0/index.js 查看效果

下一篇:Redux 入门 -- 基础用法