【发布时间】:2023-03-14 19:40:01
【问题描述】:
我知道使用Reflux.__keep.createdActions 我会得到一个创建的所有操作的列表。有没有办法知道这些动作的名称?
有没有办法为所有操作定义一个preEmit 挂钩?
【问题讨论】:
标签: refluxjs
我知道使用Reflux.__keep.createdActions 我会得到一个创建的所有操作的列表。有没有办法知道这些动作的名称?
有没有办法为所有操作定义一个preEmit 挂钩?
【问题讨论】:
标签: refluxjs
重要提示:Reflux.__keep 实际上最初是为了支持另一个从未实现的功能而创建的。然而,它也在某些程序中造成内存泄漏。因此,它最近被默认为不存储任何东西。要让它存储任何你必须在最新版本的reflux 和reflux-core 中使用的Reflux.__keep.useKeep()。 Reflux.__keep 不是 API 的记录部分,因此对其进行的更改不一定遵循语义版本控制。从 Reflux 的 v5.0.2 开始,useKeep() 需要 Reflux.__keep 来存储任何内容。
关于这个问题:
1) 在Reflux.__keep 中有一个createdActions 属性,它是一个包含迄今为止所有创建的动作的数组(当然,如果你做了useKeep() 的事情)。每个动作都应该有一个actionName 属性,告诉您创建它时提供的动作名称:
Reflux.__keep.useKeep()
Reflux.createActions(['firstAction', 'secondAction']);
console.log(Reflux.__keep.createdActions[0].actionName) // <-- firstAction
console.log(Reflux.__keep.createdActions[1].actionName) // <-- secondAction
2) preEmit 钩子可以在事后分配给动作,因此将它们分配给 Reflux.__keep.createdActions 内的动作将是一个简单的循环问题:
Reflux.__keep.useKeep()
var Actions = Reflux.createActions(['firstAction', 'secondAction']);
var total = Reflux.__keep.createdActions.length;
for (var i=0; i<total; i++) {
Reflux.__keep.createdActions[i].preEmit = function(arg) { console.log(arg); };
}
Actions.firstAction('Hello'); // <- preEmit outputs "Hello"
Actions.secondAction('World!'); // <- preEmit outputs "World!"
【讨论】: