没有动作和调度程序的流量?

时间:2016-02-28 14:18:05

标签: reactjs redux flux reactjs-flux

我开始使用Flux,我检查了Redux和Facebook Flux。这个想法非常好,但我觉得有一些样板代码,有很多电话。

我理解一个大型项目,这些锅炉板将来会有所帮助,但对于中小型项目,我认为我们不能摆脱行动和调度员,只是在商店内使用商店内的设置者和吸气剂,还允许订阅商店进行更改?

对于聊天应用程序:

{
   unreadMessages: 0,
   messages: [{
      from: myUser,
      to: toUser,
      text: "hi"
   }, ...],
   hasUnreadMsgs: () => { unreadMessages !== 0 },
   newMsg: (fromUser, toUser) => {unreadMessages++; -and insert msg-},
   getMsgs: () => messages,
   subscribe: (callback) => {...}
}

我看到的唯一缺点就是这个对象可能会变得太大。要解决该问题,我们可以轻松地将商店分成多个对象,然后使用Object.assign()将它们分配回来。例如,我们可以单独使用UserStore和MessagesStore,然后在初始化商店之前将它们合并。

据我所知,对于像Facebook这样的大型项目有多个商店是有道理的,那么单个行动可能会更新多个商店,因此行动应该分开。

但据我所知,Redux有一家商店,单店也很好。 那么,为什么我们不能摆脱行动和调度员,只是将这个单一商店用于中小型项目?

2 个答案:

答案 0 :(得分:1)

因为调度程序更新了商店,每当商店更新时,它也会发送回调,让组件知道他们可能需要更新。如果您有一个手动修补数据的商店,您自己有责任通知可能需要更改的所有组件。

但是,无论如何,如果你有办法以更简单的方式解决你的问题,请继续写下你想要的。没有人强迫你使用任何东西。

MobX这样的东西可能更适合你的编程风格吗?这就像你描述的那样,但它有一种方法来检测发生了什么变化,并通知所有感兴趣的各方。

答案 1 :(得分:1)

对于小型项目,即使不使用助焊剂架构也可以进行管理。从助焊剂中删除调度程序意味着您不再使用助焊剂。

  

Flux应用程序有三个主要部分:调度员,商店,   和视图(反应组件)。

如果项目很小,我建议不要另外保留单独的商店。只需在不使用flux体系结构的情况下维护父组件内的状态。我们使用这种方法做了小项目,效果很好。

注意:有时我们需要在没有共同父级的组件之间进行通信。对于这样的场景,我们必须使用调度程序或者可以使用小型pub-sub库。

最简单的发布/订阅实现可以是:

var Notifier = (function() {
  var callbacks = {};
  return {
    subscribe: function(name, cb) {
      callbacks[name] || (callbacks[name] = []);
      callbacks[name].push(cb);
    },
    notify: function(name, data) {
      if (!callbacks[name]) {
        return;
      }
      callbacks[name].forEach(function(cb) {
        cb(data);
      });
    },
    unsubscribe: function(name) {
      if (!callbacks[name]) {
        return;
      }
      delete callbacks[name];
    }
  }
})();

但如果它是医学或大型项目,我建议你从某种类型的模式开始。 Flux或redux都是很好的开始。使用redux或flux可能会迫使yuu编写一些样板,但从长远来看它肯定会对你有所帮助。此外,不同的模式可能会有不同的约定和良好实践,这将有助于大型团队快速做出选择并遵循相同的约定范围。这也有助于在项目中轻松加入新的团队成员。

同样有很多人采用了flux和redux,如果你使用它们,你会得到一个很好的生态系统(插件/扩展构建在这个架构之上)。

最后一切都归结为个人选择。