【发布时间】:2016-03-20 16:11:42
【问题描述】:
我已经构建了一个简单的服务来撰写一系列推文,http://tweetsmart.in 使用 React 和 Flux。我面临一个奇怪的错误,当用户登录并第一次单击推文按钮时页面会重新加载。
如果第二次点击推文按钮,事情会按预期工作。这是我登录后第一次注意到这种行为。推文按钮只是一个锚标记,因此它不是导致此问题的按钮的默认提交行为。
重现错误的步骤:
- 转到http://tweetsmart.in/popup.html
- 使用推特登录
- 登录后在文本框中写一些东西。
- 单击“推文”按钮以推文。
您会发现页面重新加载并且推文失败,但我不确定哪个先发生。当我打开 Chrome 开发人员工具并查看网络选项卡时,我发现对推文的 api 调用被取消,接下来发生的事情是页面重新加载。在我看来,页面重新加载导致 api 调用取消。
但是,我在代码中添加了一些日志语句以进行调试,但发现异常。单击 Tweet 按钮后,将调度一个 Action 将 Tweets 排队,然后如果有任何排队的 Tweets,则调度后续 Action 以发送第一个排队的 Tweet。这会导致 Api 调用 tweetsmart,它被包装在 Promise 中,并且只有当 Promise 成功或失败时,才会将进一步的 Action 分派到 Store。
但是,从控制台上的日志语句中,我发现我的主要 React 组件的 componentDidUpdate 在页面重新加载之前被调用。如果有不成功的推文,Dominic Decoco 会被记录。见https://github.com/singhshashi/tweetsmart/blob/master/js/components/TweetSmartApp.react.js
由于我没有向 store 发送任何操作,我不确定是什么导致了 react 组件更新。这仅仅是因为页面重新加载而发生吗?这会导致页面重新加载吗?
============更新1========
React 组件更新是因为取消了 api 调用,因此调度了 TWEET_FAILED 操作。我认为取消 api 调用的原因是触发了重新加载。问题是什么触发了页面重新加载?
【问题讨论】:
标签: javascript google-chrome reactjs flux reactjs-flux