反应视图未成功收听存储

React view not successfully listening to store

我有 a React controller-view 订阅了两个不同的商店,并启动了将导致每个商店发出的调用:

componentWillMount() {
  UserStore.addChangeListener(this._onChange);
  EventStore.addChangeListener(this._onChange);
}

componentDidMount() {
  UserService.getUser(this.props.params.slug)
  EventService.fetchEventsForUser(this.props.params.slug);
}

对于 UserStore 听众来说,这很好用。用户从 API 获取,返回到 the UserStore,发出更改。如果我放入 console.log 语句,我可以完全按照我期望的方式看到所有这些流程,以我的控制器视图的 _onChange 函数结束。

但是。 由于某些无法解释的原因,添加到 the EventStore 的更改侦听器没有触发。事件从 API 中正确获取,并返回到我期望的 EventStore 方法,它正确更新 EventStore 的内部状态,甚至触发 emitChange() 很好(我已经用大量 console.log 语句进行了验证)。但是控制器视图中的 _onChange 永远不会被调用!

我已经尝试解决此问题近两位数的时间了。我觉得没有比开始时更接近答案了。我什至不知道去哪里看。


其他说明

我看到 EventsStore 扩展了 BaseStore,它扩展了 events.EventEmitter。那是 node.js 标准库事件发射器吗?

如果是这样,您可能在 _events 上有命名冲突。

您的商店使用 _events 来保存数据:https://github.com/chadoh/life/blob/no-dates/src/stores/EventStore.js#L10

但是EventEmitter也使用_events来存储事件处理程序:https://github.com/joyent/node/blob/d13d7f74d794340ac5e126cfb4ce507fe0f803d5/lib/events.js#L140-L186

因此,事件数据可能会覆盖事件处理程序的集合,导致处理程序永远不会触发(因为它们不存在!)。

您可以尝试使用不同的密钥来保存数据(例如 _eventData),看看是否能解决您的问题!