/Users
处有一个react-apollo GraphQL连接的用户组件,它请求用户列表。
呈现到/login
路由;成功登录后,login组件将保存令牌并重定向回来。/Logout
中的注销组件将丢弃该标记,然后重定向回来;Users组件的请求再次获得身份验证错误,并将您发送到'/login'。我可以看到graphql请求成功了(并在Chrome的调试器中观察到APOLLO_QUERY_RESULT操作由React-Apollo的reducer处理并更新存储中的状态)。
我试图找到React正在检查的地方,以查看组件的道具是否发生了变化,但我已经厌倦了React调试noob,以至于我还没有找到在web Inspector中找到代码的地方:也许我不明白React是如何打包用于分发的。
我已经构建了一个精简的示例:https://github.com/bryanstearns/apollo-auth-expersion,您可以在codesandbox:https://codesandbox.io/s/m4nlpp86j中看到它(您可能希望从https://m4nlp86j.codesandbox.io/的独立浏览器窗口访问正在运行的示例,因为沙箱编辑器使web调试扩展有点奇怪)。
要修复此行为,请修改graphql HOC以在选项中包含NotifyonNetworkStatusChange
。
export const Users = graphql(usersQuery, { options: { notifyOnNetworkStatusChange: true } })(RawUsers);
我不认为您必须这样做--我认为data.loading
应该准确地反映查询的状态,而不管该选项是否设置为true,这与data.networkstatus
不同,但看起来这是一个已知的bug。
至于ResetStore
--它实际上并不清除整个存储区,而是清除存储区并重新设置所有活动查询。如果你想摧毁你的商店,因为你已经集成Redux和Apollo了,最简单的事情就是创建一个动作来实现它。
是否有系统的方法来调试导致组件在React中重新呈现的原因?我放了一个简单的console.log()来查看它呈现多少次,但很难弄清楚是什么导致组件呈现多次,即在我的情况下(4次)。是否存在显示时间线和/或所有组件、树呈现和顺序的工具?
在我点击提交按钮后,我如何使页面刷新或更新页面中的内容?我尝试将(我知道不是React方式,具有相同的结果)放入提交函数(、)中,但POST请求没有得到响应 OpenTickets.js CardConversation.jsx
问题内容: 我是新来的世界,我有这样的话: 然后单击,您将被打印在控制台上。现在将行更改为: 现在点击该按钮,我希望它会被渲染。但事实并非如此。 我不确定为什么会这样。请注意,我在方法中有上面的代码。 问题答案: 您可能希望有一个状态组件,该状态组件在单击按钮之后在按钮旁边显示另一个组件。您需要做的就是跟踪按钮是否被单击:
我从这里修改了以下组件定义,如下所示。但是,与示例不同的是,每次在组件上移动鼠标时,组件都会重新呈现。 重新渲染非常引人注目: 有人知道为什么会这样吗?
对于在其生命周期的某个点隐藏的组件,呈现它的最佳方式是什么?1)渲染组件,但不显示它(显示:无)。2)只在需要时渲染组件。什么对性能更好?如果组件的道具和状态稍后更新,是否最好让组件存在,但隐藏在虚拟DOM中? 或者这个:
我是新来的反应。作为一个学习练习,我正在构建一个国际象棋应用程序 我想根据父级中的状态更改子级的DOM。当前,在父级组件的状态变化时,子级组件没有变化。 PS:请忽略任何语法错误。这段代码是实际代码的精简。如果你想看完整的代码,请看这里