mr_*_*ash 7 javascript ecmascript-6 reactjs es6-class
我知道这个问题被多次提出过,但现在还不清楚.很多人只是说:
如果要访问
this.props那些,请将props传递给构造函数
Oficial doc说类组件应该总是用props调用基础构造函数.,但如果我们不通过props到constructor,我们仍然有this.props无处不在exept构造.
另外,从反应源代码中我们可以看到React.Component的源代码
function ReactComponent(props, context) {
this.props = props;
this.context = context;
}
但它让我更加困惑.
super()应该用两个参数调用:props和context.但我们调用了我们的超级空,仍然可以访问两个this.props.根据ECMA文档,super()调用constructor()传递给参数的父级super().但我们super()是空的.
所以我的问题是:
类组件应始终使用props调用基础构造函数.
props为子组件if super()和constructor()为空?super()和constructor()?以下是丹·阿布拉莫夫的回答:
但如果我们不传到
props,constructor我们仍然会处处this.props除了constructor。
是的,React在运行this.props后无论如何都会设置 constructor 。this.props尽管如此,在某些地方有工作而在其他地方却没有工作还是令人困惑。特别是如果这两个 constructor 方法和其他方法都调用一些读取的共享方法this.props。因此,为了避免任何潜在的混乱,我们建议始终致电super(props).
另外,从源代码中
Create Element您可以看到,createElement无论您是否使用,都会添加道具super(props)
createElement()与这个问题没有关系。它创建一个元素,而不是一个实例。
因此,回到您的问题,从技术上讲,仅当您计划this.props在 constructor 或从 调用的任何方法中访问时才有必要 constructor 。然而,必须记住这一点是相当令人困惑的。您可能知道这一点,但没有致电super(props),但您团队中的下一个人会想要访问this.propsa constructor ,并且会惊讶地发现它不起作用。始终指定它以避免这些问题会更容易。
| 归档时间: |
|
| 查看次数: |
2707 次 |
| 最近记录: |