弄清楚组件是否将要更新或不响应

时间:2017-05-30 11:55:07

标签: reactjs redux react-redux

根据this回答,react redux shallow比较cell.cellClicked = { (name, value) in } 的输出,以确定是否需要重新渲染组件。

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

有没有办法打印在connect函数中进行的有关重新渲染组件的检查的输出

2 个答案:

答案 0 :(得分:3)

如果您想确认反应还原优化是否会妨碍,可以使用connect功能的options argument将其关闭。 e.g。

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

这将绕过所有等式检查,并允许YourComponent在每个状态或支柱更改上重新呈现。如果它仍未重新渲染您的组件,则问题出在其他地方。

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

答案 1 :(得分:0)

还有另一个方面需要考虑:对帐。您的组件可能会更新,但可能 Reactjs会发现组件的的DOM结果将是相同的,因此不需要重新渲染。我强烈建议您在组件中实现函数private static ReadOnlyDictionary<string, byte> _validRevisions; static FooClass() { IDictionary<string, byte> dict = new Dictionary<string, byte>() { { "1.0", 0x00 }, { "1.1", 0x01 }, { "1.2", 0x02 }, { "1.3", 0x03 } }; _validRevisions = new ReadOnlyDictionary<string, byte>(dict); } ,并自己比较shouldComponentUpdate(nextProps, nextState)this.props并了解情况。