是否有人更喜欢使用React组件的构造函数而不是componentWillMount的原因?

我发现,使用生命周期方法componentWillMount设置初始状态...是否有人更喜欢使用React组件的构造函数而不是componentWillMount的原因?

componentWillMount() { 

this.state = {

comments: []

};

}

...比使用构造稍微简单一些。这是因为当你使用构造函数致电super()

constructor() { 

super();

this.state = {

comments: []

};

}

不仅如此,但如果你的组件传递props和/或state,那么你必须通过以及手动传递这些。

constructor(props, state) { 

super(props, state);

...

}

我没有使用componentWillMount任何问题,但我几乎从来没有看到使用它的人设立的状态(除非他们避免ES6和不上课)。我得到我们可以访问es6类中的构造函数,但是为什么在必须将手动传递连接到父构造函数时使用它,并且有一个完美的生命周期方法已准备好并等待,因此您不必这样做?

只是好奇,如果有实际的实际原因,或者如果它大多只是偏好。

回答:

构造函数是初始化(直接分配给)state唯一“正确”的地方。即this.state = {...}

您在组件中定义的其他功能(componentWillMount等)称为React引擎调用的“生命周期回调”。预计state应该在组件的整个生命周期中不可改变,并且绝不能直接分配给组件。相反,您必须this.setState({...})才能对构造函数外部的任何位置的state进行任何更改。

尽管您目前的做法可能尚未引起任何问题,但不保证以相同的方式继续工作。如果由于某种原因,React在生命周期回调之间读取state,并且您在componentWillMount回调中发生了变异,这可能会产生意想不到的后果。

我的建议是只在您的构造函数中直接初始化state,并在其他地方使用setState

如果冗长是一个问题,你有没有其他目的的构造不是初始化你state,你不需要props来初始化你state,只是声明和初始化您的国家财产:

class MyComponent extends React.Component { 

state = {}

}

回答:

那么根据DOCS:

一般情况下,我们建议使用构造函数()代替。

它还提到:

这就是所谓的在服务器上呈现的唯一的生命周期挂钩。

所以我想这可能是原因的一部分。

以上是 是否有人更喜欢使用React组件的构造函数而不是componentWillMount的原因? 的全部内容, 来源链接: utcz.com/qa/258546.html

回到顶部