假设以下所有三个组件配置均有效:
<Arc radius="200"/>
<Arc radius="90% - 20"/>
<Arc radius={this.calcRadiusFn}/>
首先将使用绝对值200作为圆弧半径。
第二个将半径设置为默认半径的90%(该默认半径是从弧的容器的大小派生的)减去20个像素。
第三种方法将使用提供的calcRadiusFn
函数来计算半径(该函数具有默认半径,并使用某种逻辑来返回某些派生值)。
在所有三种情况下,我实际上都希望将收到的radius
道具转换为一个函数:
1) (x) => 200
2) (x) => x * 0.9 - 20
3) (x) => Math.sqrt(x) + 42
因此,在render
方法中,我可以这样做:
const radius = this.radiusFn(defaultValue);
// or
const radius = this.state.radiusFn(defaultValue);
我知道这里有getDerivedStateFromProps
,并且今年夏天已弃用旧方法:https://reactjs.org/blog/2018/06/07/you-probably-dont-need-derived-state.html
但是getDerivedStateFromProps
似乎不是执行此操作的正确位置。您可以使用它来执行此操作,但是您基本上是在为要转换的每个道具创建自己的临时解决方案,并记住先前道具的价值,等等。道具使用前的系统/惯用方式?