javascript - getDerivedStateFromProps 中有很多逻辑,瘦与胖 gDSFP
问题描述
我想知道拥有“胖”gDSFP 功能是否是不好的做法。目前,我有一个组件可以接收一些数据并进行大量数据操作
function getDrivedStateFromProps(nextProps, prevState) {
// start doing data manipulation
并且在此过程中,如果遇到错误条件,它会返回一个新的错误状态片
const someValue = nextProps.something * myFunc()
if (someValue === badThing()) {
return {error: true};
}
// continue doing data manipulation
在完成所有数据操作并返回我的组件需要的 derivedState 之前,这会重复几次。我很好奇社区对“胖”gDSFP 功能的看法。我的组件仅在外部数据源发生更改并且需要派生新状态时才运行 gDSFP,因此我看不到该逻辑还能存在于何处。
解决方案
我认为您实际上可能处于使用getDerivedStateFromProps
可能根本不是最佳方法的情况。在您的问题中,您说...
我的组件仅在外部数据源发生更改并且需要派生新状态时才运行 gDSFP,因此我看不出该逻辑还能存在于何处。
鉴于此声明,听起来您可以使用 memoization。这是在反应文档上讨论的这个概念。
基本思想是管理getDerivedStateFromProps
会变得很麻烦,尤其是当你有很多逻辑时。如果您想以状态捕获道具的原因只是为了提高性能,那么 memoization 可能是您的朋友。
这里的想法是,您不希望每次道具更改时都运行一些逻辑,所以这将为您带来的是,如果您有一个参数与以前相同的函数,例如状态没有改变,您的函数将返回它存储在缓存中的最后一个计算结果。这个库很好地处理了这个问题,并且非常易于使用。
人们经常遇到的另一个可能促使他们寻求解决的问题getDerivedStateFromProps
是确保他们的组件不会渲染,除非 props 实际上发生了变化,因此通过让组件基于计算状态进行渲染可以实现这一点。
但这也可以在不使用的情况下实现getDerivedStateFromProps
。使用PureComponent可以为您提供同样的结果,而且不会大惊小怪。另一个选项可以是shouldComponentUpdate。
简而言之,除非您有一些非常具体的原因getDerivedStateFromProps
适合您的用例,否则您最好寻求一种涉及较少拉扯的解决方案。
推荐阅读
- r - LDA 主题模型按年份绘制
- dart - super 和 Key 在 flutter 中做了什么?
- c# - 从 datagridview 使用 foreach 循环更新 xmlnodes
- haskell - Haskell中基于布尔条件执行多条语句
- python - Windows 中 tensorflow 的 gpu 使用率低
- php - laravel 雄辩的枢轴与主 id 来引用另一个枢轴
- reactjs - Next Js Router.push 不是函数错误
- pdf - PDF DATA 将多个字段提取到 csv 或 xls
- spring-boot - 如何从 Spring Security 中的 post 方法获取用户名?
- google-sheets - 基于子字符串的唯一事件列表 - Google 表格