getDerivedStateFromProps中的很多逻辑,瘦与胖gDSFP

时间:2018-08-21 19:14:06

标签: javascript reactjs getderivedstatefromprops

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

1 个答案:

答案 0 :(得分:0)

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

  

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

给出此语句,听起来您可以使用备忘录。 Here是在react文档上讨论的这个概念。

基本思想是管理getDerivedStateFromProps可能会麻烦很多,尤其是当您有很多逻辑要进行的时候。如果您要捕获状态中的道具的原因仅仅是为了提高性能,那么备忘录可能就是您的朋友。

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

人们经常会想到的另一个问题可能是促使他们达到getDerivedStateFromProps,除非他们确实更改了道具,否则要确保其组件不会渲染,因此通过使组件基于计算状态进行渲染,可以避免这种情况。可以实现。

但是,也可以不使用getDerivedStateFromProps而实现。使用PureComponent可以使您获得相同的结果,而不必大惊小怪。另一个选项可以是shouldComponentUpdate

简而言之,除非您有特定的特定原因使getDerivedStateFromProps适用于您的用例,否则最好选择一种涉及较少拉扯头发的解决方案。