当前位置: 首页 > 知识库问答 >
问题:

确定组件是否要更新或没有反应

程仲卿
2023-03-14

根据这个答案,react redux shallow比较MapStateTrops的输出,以确定组件是否需要重新渲染。。

我有一个组件,尽管相关状态发生了变化,但它不会重新渲染。我在react redux源代码中将断点附加到shallowEqual函数,但发现该函数实际上返回false(即在我的组件不相等的情况下比较的对象)。因此,理想情况下,我的组件应该重新渲染。因此,我无法理解为什么我的组件没有重新渲染。我猜这是因为connect函数中的性能优化。

是否有任何方法可以打印在connect函数中进行的有关组件重新呈现的检查的输出

共有2个答案

朱宇航
2023-03-14

还有另一个方面需要考虑:和解。组件可能会更新,但Reactjs可能会发现组件的DOM结果是相同的,因此不需要重新渲染。我强烈建议您在组件内部实现shouldComponentUpdate(nextProps,nextState)函数,并将与此进行比较。道具下一步行动由您自己完成,并了解情况。

梅跃
2023-03-14

如果要确认是否是react redux优化妨碍了您,可以使用connect函数的options参数将其关闭。例如

export default connect(mapStateToProps, mapDispatchToProps, undefined, { pure: false })(YourComponent)

这将绕过所有相等性检查,并允许YourComponent在每次状态或属性更改时重新渲染。如果它仍然没有重新呈现组件,那么问题就在别处。

请记住在提交更改之前删除该选项(除非实际上需要)。

 类似资料:
  • 当供应商目录中已经下载了一些组件时 在其上运行安装以及运行更新时会产生什么影响?

  • 可写CTE被认为是9.5之前UPSERT的一种解决方案,如在PostgreSQL中重复更新时插入所述? 可以使用以下可写CTEs惯用语执行UPSERT,其中包含的信息是作为更新还是插入结束的: 此查询将返回“更新”或“插入”,或者可能(很少)失败,违反了https://dba.stackexchange.com/questions/78510/why-is-cte-open-to-lost-upd

  • 问题内容: 我开发了一个使用GoogleMap的应用程序。我刚刚在Eclipse中更新了Android插件(带有Android L库),并重新导入了GooglePlayService库等。 因此,我重新编译后,在手机(4.4.2中的Sony Xperia Z),GenyMotion Emulator(4.4.2),Nexus 7(4.4.2)上都可以正常工作。但是,它不能在两个Samsung Ga

  • 问题内容: 我的文件夹中有JavaScript文件。Django可以很好地找到并加载它们,因此我认为我的选项配置没有任何问题。但是,有时候,当我对文件进行更改并保存时,使用该文件的Django模板不会反映这些更改- 使用浏览器检查javascript会在最后一次保存之前显示javascript。重新启动服务器没有任何作用,尽管重新启动计算机有时可以解决问题。我没有任何明确处理缓存的代码。有没有人经

  • 另外,我知道如何使用Driver.getTitle,但它只返回父窗口的标题。在确定新打开的窗口或选项卡是否处于焦点时,我无法发现任何东西。 如果有可能处理这两个问题,至少有人能给我指明正确的方向吗?

  • 问题内容: 我是新手,不胜感激。 在这段代码中,我要把一张卡片面朝上,如果发现它们不匹配,我希望它们再次面朝下。 此刻正在发生的事情:1.单击第一张卡片时翻转2.单击第二张卡片时,发生以下两种情况中的任何一种(a)如果它们相同,它们都停留在我想要的状态(b)如果它们并不相同,我根本看不到第二张卡,因为第二张卡会立即重新显示卡的背面(以及我的方法中定义的上一张卡的背面)。 我以为放入睡眠计时器可能会