0

我想知道拥有“胖”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,因此我看不到该逻辑还能存在于何处。

4

1 回答 1

0

我认为您实际上可能处于使用getDerivedStateFromProps可能根本不是最佳方法的情况。在您的问题中,您说...

我的组件仅在外部数据源发生更改并且需要派生新状态时才运行 gDSFP,因此我看不出该逻辑还能存在于何处。

鉴于此声明,听起来您可以使用 memoization。是在反应文档上讨论的这个概念。

基本思想是管理getDerivedStateFromProps会变得很麻烦,尤其是当你有很多逻辑时。如果您想以状态捕获道具的原因只是为了提高性能,那么 memoization 可能是您的朋友。

这里的想法是,您不希望每次道具更改时都运行一些逻辑,所以这将为您带来的是,如果您有一个参数与以前相同的函数,例如状态没有改变,您的函数将返回它存储在缓存中的最后一个计算结果。这个库很好地处理了这个问题,并且非常易于使用。

人们经常遇到的另一个可能促使他们寻求解决的问题getDerivedStateFromProps是确保他们的组件不会渲染,除非 props 实际上发生了变化,因此通过让组件基于计算状态进行渲染可以实现这一点。

但这也可以在不使用的情况下实现getDerivedStateFromProps。使用PureComponent可以为您提供同样的结果,而且不会大惊小怪。另一个选项可以是shouldComponentUpdate

简而言之,除非您有一些非常具体的原因getDerivedStateFromProps适合您的用例,否则您最好寻求一种涉及较少拉扯的解决方案。

于 2018-08-21T19:47:16.410 回答