Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在构造函数与componentWillMount中,哪种初始化更合适?_Reactjs - Fatal编程技术网

Reactjs 在构造函数与componentWillMount中,哪种初始化更合适?

Reactjs 在构造函数与componentWillMount中,哪种初始化更合适?,reactjs,Reactjs,如果我有一个React组件需要一些设置(例如计时器或WebAudio API等),我很难确定初始化是否应该进入构造函数或组件将装载。这两种方法各有利弊吗?我不清楚哪个地方更适合这个 我在谷歌上搜索了一下,看看是否有人讨论过constructor和componentWillMount之间的区别,但我什么也找不到 编辑:Redux和任何异步函数都不应该是等式的一部分。如果要调用某些通量操作(对于ajax调用),请使用componentWillMount或componentDidMount 您可以在构

如果我有一个React组件需要一些设置(例如计时器或WebAudio API等),我很难确定初始化是否应该进入
构造函数
组件将装载
。这两种方法各有利弊吗?我不清楚哪个地方更适合这个

我在谷歌上搜索了一下,看看是否有人讨论过
constructor
componentWillMount
之间的区别,但我什么也找不到


编辑:Redux和任何异步函数都不应该是等式的一部分。

如果要调用某些通量操作(对于ajax调用),请使用componentWillMount或componentDidMount


您可以在构造函数中初始化状态

通常,您在构造函数中所做的唯一一件事就是将您的初始
分配给此。如果您的组件是有状态的,则状态
。您不应该在构造函数中执行任何其他操作

组件将挂载
通常是不必要的。我想说,在大多数情况下,它的使用是一种反模式。人们使用它的一个原因是为了在渲染之前最后一次从外部源更新状态,但从技术上讲,在构造函数中分配它是等效的。它提供的唯一小便利是,您可以
setState
在它内部,但不能在构造函数内部


对于任何副作用(数据获取或DOM操作),您应该使用
componentDidMount

根据文档,这应该放在
componentDidMount
中:“如果您想…设置计时器…或设置间隔…使用此方法执行这些操作。”似乎如果我正在构建一个高阶组件,我需要在
componentWillMount
中设置。作为一个测试,我将
WillMount
重命名为
DidMount
,并且我在包装的组件中得到了一个关于道具不存在的错误(该道具是从HOC的状态传递到它的)。也许HOC是一种特殊情况,
componentWillMount
是一个更好的初始化位置,并且必须基于一系列代码执行来设置状态?(具体指)是否构建HOC没有区别。HOC只是一个返回组件的函数。此组件与任何其他组件没有区别,因此应用相同的规则。在代码中,您希望将用于计算初始状态的逻辑移动到构造函数中。您不需要调用
setState
而是将其分配给
this.state
.Ahh,因此构造函数是所有设置代码的合适位置。我不确定。我不停地来回查看它是属于
构造函数
还是
组件didmount
。。因此,这篇文章如下:所以,我明白了为什么DOM操作在构造函数中不起作用,但是数据获取有什么问题吗?这是一个副作用。副作用不应放在构造函数中。没有理由认为这本身是“坏的”,但这是预期的使用模式。当构造函数运行时,并不能保证组件会很快安装(实际上会,但将来可能会改变)。所以请不要在构造函数中执行副作用。另外,我也不完全确定“所有的设置代码”是什么意思。我在回答中说,构造函数唯一适合的就是指定初始状态。这就是我建议进入构造函数的内容。我不建议将任何其他内容移动到构造函数中。