据我所知,一个唯一componentWillMount
可以做的事和一个constructor
不能做的事就是打电话给setState
。
componentWillMount() {
setState({ isLoaded: false });
}
由于我们尚未调用render
,因此setState
in
componentWillMount
会在进入render()
第一遍之前准备状态对象。本质上是相同的constructor
:
constructor(props) {
super(props);
this.state = { isLoaded: false };
}
但是我看到了另一个componentWillMount
有用的用例(在服务器端)。
让我们考虑一些异步的东西:
componentWillMount() {
myAsyncMethod(params, (result) => {
this.setState({ data: result });
})
}
在这里,我们不能使用constructor
as分配来this.state
不会触发render()
。
怎么样setState
的componentWillMount
?根据React
docs
:
componentWillMount()
在挂载发生之前立即调用。在之前调用render(
),因此在此方法中设置状态不会触发重新渲染。避免在此方法中引入任何副作用或订阅。
因此,在这里,我认为React将在第一次渲染时使用新的状态值,并避免重新渲染。
问题1:
在内部componentWillMount
,这是否意味着如果我们调用setState
异步方法的回调(可以是promise回调),React会
阻止初始渲染, 直到执行该回调?
在 客户端进行 此设置(是的,我在服务器端渲染中看到了该用例),如果我假设上述情况是正确的,那么在我的异步方法完成之前,我将看不到任何东西。
我是否缺少任何概念?
问题2: 我componentWillMount
仅使用而不使用constructor
and
可以实现的其他用例componentDidMount
吗?
这是否意味着在componentWillMount内部,如果我们在异步方法的回调(可以是promise回调)中调用setState,React会阻止初始渲染,直到执行该回调?
不,请看 这里。
以下代码不会阻止渲染(请记住,无论如何在那里调用setState都是一种反模式)
componentWillMount: function() {
new Promise((resolve, reject) => {
setTimeout(()=> {
resolve();
}, 2000)
}).then(() => this.setState({ promiseResult: 'World' }));
},
问题2:我是否可以仅使用componentWillMount来实现其他用例,而不使用构造函数和componentDidMount来实现?
不,对于ES6类,您可以丢弃componentWillMount 。仅当您使用时才需要React.createClass({... })
编辑:显然,我错了。感谢@Swapnil指出这一点。这里是讨论。
反应引发警告,如果有在副作用constructor
中的另一组件,其修饰状态,因为它假设setState
在constructor
本身和潜在期间render()
被调用。因此,不需要任何副作用constructor
。
如果在中执行此操作,则不是这种情况componentWillMount
,不会引发任何错误。另一方面,来自Facebook的家伙componentWillMount
也阻止了副作用。因此,如果您没有任何副作用,可以使用constructor
代替componentWillMount
。对于副作用,建议使用componentDidMount
代替componentWillMount
。无论哪种方式,您都不需要componentWillMount
。
问题内容: 我是一名Java初学者,了解以下Java编译器规则: 如果该类没有超类,则将其扩展到Object类 如果该类没有构造函数,请添加默认的无参数构造函数 如果构造函数的第一行不是“ super()”或“ this()”,请添加“ super()”以调用超类的默认构造函数。 我知道我们创建的所有对象都是从超类Object派生的。我的问题是被调用时Object类中的构造函数做什么? 编辑:我的
问题内容: 如果我在构造函数中返回一些值或对象,那么var会得到什么? 在两种情况下都会得到什么n? 其实这是一个测验问题,答案是什么? 自定义对象构造函数返回什么? a)新实例化的对象 b)未定义-构造函数不返回值 c)不论return语句是 d)等于return语句是什么;新实例化的对象(如果没有return语句) 问题答案: 我发现了这个很棒的链接: 上面提到的第二点魔术是构造函数返回特定的
本文向大家介绍请解释Java中的概念,什么是构造函数?什么是构造函数重载?什么是复制构造函数?相关面试题,主要包含被问及请解释Java中的概念,什么是构造函数?什么是构造函数重载?什么是复制构造函数?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JAVA构造函数 当新对象被创建的时候,构造函数会被调用。每一个类都有构造函数。在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一
问题内容: 在Python中,用于初始化不可变类型,通常用于初始化可变类型。如果将其从语言中删除,该怎么办(轻松)? 例如, 可以这样重写: 为澄清问题的范围:这不是一个问题关于如何以及是使用或它们之间有什么区别。这是一个问题,如果从语言中删除将会发生什么。有什么坏事吗?事情会变得很难或不可能吗? 问题答案: 您可以在中进行的所有操作都可以在中完成。 那么,为什么要使用? 因为您不必将实例存储在变
问题内容: 我想我了解Lisp宏及其在编译阶段的作用。 但是在Python中,您可以将一个函数传递给另一个函数 因此,我们在这里得到了懒惰的评估。我可以使用宏而不是使用函数作为一流对象怎么办? 问题答案: 首先,Lisp也具有一流的功能,因此您也可以问:“如果我已经具有一流的功能,为什么在Lisp中需要宏”。答案是一流的函数不允许您使用语法。 从表面上看,一流的函数允许您编写或,但不允许编写。尽管
问题内容: 这些来自github上的spring amqp示例,位于https://github.com/SpringSource/spring-amqp- samples.git 这些是 什么类型的Java构造函数?它们是吸气剂和吸气剂的捷径吗? 与此相反 问题答案: 这些构造函数被重载以使用调用另一个构造函数。第一个无参数构造函数使用空参数调用第二个。第二呼叫的第三构造(未示出),其必须采取,