反应视图未成功侦听存储
React view not successfully listening to store
>我有一个 React 控制器视图,它订阅了两个不同的存储,并发起了导致每个存储发出以下调用的调用:
componentWillMount() {
UserStore.addChangeListener(this._onChange);
EventStore.addChangeListener(this._onChange);
}
componentDidMount() {
UserService.getUser(this.props.params.slug)
EventService.fetchEventsForUser(this.props.params.slug);
}
对于UserStore
侦听器,这工作正常。用户从 API 获取,API 返回到发出更改的 UserStore
。如果我输入console.log
语句,我可以完全按照我期望的方式看到所有这些流程,以我的控制器视图的_onChange
函数结束。
但。由于某种莫名其妙的原因,添加到EventStore
的更改侦听器没有触发。这些事件是从 API 正确获取的,并返回到我期望的 EventStore
方法,该方法正确更新EventStore
的内部状态,甚至可以很好地触发emitChange()
(我已经用大量的 console.log
语句验证过(。但是控制器视图中的_onChange
永远不会被调用!
我一直在尝试解决此问题,现在已经接近两位数的时间了。我不觉得比我开始时更接近答案。我什至不知道去哪里看。
其他注意事项
- 我尝试从控制器视图中删除
UserStore
侦听器,只是在UserStore
中设置静态内容。我想也许两者更新之间可能存在竞争条件。什么都没有改变。 - 我尝试将控制器视图的
_onChange
拆分为两个单独的函数,再次怀疑它们不能很好地协同工作。但console.log
表明,_onUserChange
按预期被调用,但_onEventChange
根本没有被调用。 - 这曾经有效!在主分支中,我一直从中链接到分支的拉取请求,它可以工作!所有内容的结构都略有不同,在那里——我一直链接到的控制器视图只侦听
UserStore
的变化,而它的子组件侦听EventStore
的变化。但是,如果我复制此结构,它仍然不起作用。在我的新分支中,任何正在倾听EventStore
变化的组件似乎都对这种变化完全充耳不闻。 - 同样在
master
上,EventStore
做的计算比现在多得多。不过,我非常怀疑它的速度慢会让听众更有可能听到它。UserStore
同样简单,它的听众听到它没有问题。 - 有时它确实有效。大约 1 个页面加载中的 100 个,它可以工作。组件更新其状态,并实际显示服务器加载的内容。我无法重现这一点或确定导致它的原因。
- 此应用程序中的另一个组件也侦听
EventStore
更改,也很少听到它们。 - 您可以看到它在 http://life.chadoh.com/#/chadoh 无法正常工作。如果随后访问 http://life.chadoh.com/#/chadoh/week/0,您将看到事件已从服务器正确加载。但由于某种原因,听众没有被提醒。如果您在 http://life.chadoh.com/#/chadoh/week/0 上刷新页面,则侧边栏将永远不会使用事件进行更新(区别在于它是在加载数据之前还是之后最初呈现
EventStore
(。 - 将
EventStore
中的get events()
方法更改为常规events()
不起作用。 - 将
EventService.fetchEvents
调用放在setTimeout
中不会产生更好的结果。 - 将
listen
调用放在构造函数中不会产生更好的结果。
我看到EventsStore
扩展BaseStore
扩展events.EventEmitter
.这是节点.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
(,看看是否可以解决您的问题!
- AJAX调用在chrome扩展中未成功
- Html5 Web 存储未在第二页中显示数据
- ReactJS 存储未注册
- 存储未更新到列表的数据
- 本地存储未按预期工作
- extjs 4 存储未定义
- 会话存储未保存或未加载
- 用于存储未按预期行为的对象的原型
- 本地存储未按预期工作
- 模型的存储未定义
- EXT JS存储未从getJson调用正确加载数据
- 如何从KML文件中将一对融合表与GroundOverlays集成?更新了我试图解决的问题(未成功)
- 具有数据绑定URL的ExtJS存储未重新评估数据属性
- 分析对象未成功编辑
- 本地存储未存储
- 直接向s3 / client上传文件.使用这种方法在s3存储桶中存储未使用的文件是否存在问题?
- 是否在服务器端存储未解码的jwt令牌
- 在提交操作期间未成功执行函数
- 反应视图未成功侦听存储
- Javascript表单验证未成功