我开始使用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有一家商店,单店也很好。 那么,为什么我们不能摆脱行动和调度员,只是将这个单一商店用于中小型项目?
答案 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,如果你使用它们,你会得到一个很好的生态系统(插件/扩展构建在这个架构之上)。
最后一切都归结为个人选择。