reactjs - 定期在 React-Redux Connect 处停止调试
问题描述
我使用 React-Redux 已经有一段时间了,但是在调试组件和存储之间交互的“连接”时我总是有一个问题,例如
ln export default connect((state) => {
112 return {
113 isUserAdmin: isUserAdmin(state)
114 };
115 })(MainPage);
isUserAdmin(state) {
222 // perform a heavy task...
}
如果我在第 113 行放置一个断点,即使我没有对我的组件进行任何更改,我发现它每 1 秒定期触发一次,并且我的函数isUserAdmin(state) 正在一次又一次地执行并且永远不会停止了,这是由 react-redux 设计的吗?
我还发现在我的调用堆栈中有一些订阅触发了连接(mapStateToProps),这是否意味着在幕后 react-redux 正在使用某种订阅或承诺执行轮询来维护状态?
顺便说一句,如果我的isUserAdmin工作繁重,或者我通过执行其他方法传递了额外的 mapStateToProps,这是否会对我的应用程序性能产生很大影响,因为它似乎在后台无限运行?
解决方案
即使我没有对组件进行任何更改,我发现它每 1 秒定期触发一次。
- 它与您在组件中所做的更改(本地组件状态更新)无关(除非您通过 dispatch 进行任何商店更新
actions
)。它只听store
更新。 - 第一次
redux
store
在应用程序加载时以默认状态触发。随后的触发器取决于您通过调度在应用程序/组件中执行的商店更新actions
。
这是否意味着在幕后 react-redux 正在使用某种订阅或承诺执行轮询以维护状态?
- 是的。它订阅存储更新。事情在这里得到了很好的解释。
如果我的 isUserAdmin 工作繁重,或者我通过执行其他方法传递了额外的 mapStateToProps,这会对我的应用程序性能产生很大影响。
- React将成为你的救星。如果状态/引用未更改,则 UI/组件不会重新渲染。
我建议您将isUserAdmin
逻辑移动到反应组件并使用useMemo()
钩子来获得性能优化以进行密集计算。供您参考。
推荐阅读
- android - IntentIntegrator 类在 zxing-android-embedded-4.1.0-sources.jar 但无法调用
- javascript - 运算符 '<' 不能应用于类型 'Date' 和 'number'.ts(2365)
- arrays - Laravel 多维数组收集对象值
- ios - 首次使用 NEHotSpotConfiguration 无法加入 Wifi
- python - ctypes,python3.8:OSError:异常:访问冲突写入0x00000000
- c# - 如何使用 MS Graph API 获取组织中的所有部门
- typescript - TypeScript 为 Semantic UI fullTextSearch 参数错误地抛出错误 TS2769
- c++ - C++ 如何将字符串 YYYYMMDD 转换为时间戳
- jsf - 从使用与变量本身不同的参数声明的 JSF 页面调用 setter
- python - 打开所有匹配正则表达式的文件 - python