才知道,从阵营v15.3.0,我们有一个新的名为基类PureComponent与扩展PureRenderMixin内置.我所理解的是,在引擎盖下,它采用了内部道具的浅层比较shouldComponentUpdate.
现在我们有3种方法来定义React组件:
PureComponent类的组件Component类的普通组件一段时间后,我们习惯将无状态组件称为纯组件,甚至是哑组件.似乎"纯"这个词的整个定义现在在React中已经改变了.
虽然我理解这三者之间的基本差异,但我仍然不确定何时选择什么.还有什么是性能影响和权衡取舍?
这些是我希望澄清的问题:
PureComponent类(为了性能)?Component当我总能使用PureComponent以获得更好的性能时,我是否需要扩展普通类?据我所见,唯一componentWillMount可以做的constructor就是打电话setState.
componentWillMount() {
setState({ isLoaded: false });
}
Run Code Online (Sandbox Code Playgroud)
由于我们尚未调用render,因此setState在componentWillMount进入render()第一遍之前,in 将准备状态对象.这与a基本相同constructor:
constructor(props) {
super(props);
this.state = { isLoaded: false };
}
Run Code Online (Sandbox Code Playgroud)
但我看到另一个componentWillMount有用的用例(在服务器端).
让我们考虑异步的东西:
componentWillMount() {
myAsyncMethod(params, (result) => {
this.setState({ data: result });
})
}
Run Code Online (Sandbox Code Playgroud)
这里我们不能使用constructoras赋值来this.state触发render().
怎么样setState的componentWillMount?根据React文档:
componentWillMount()在安装发生之前立即调用.之前调用它render(,因此在此方法中设置状态不会触发重新渲染.避免在此方法中引入任何副作用或订阅.
所以,在这里我认为React将使用新的状态值进行第一次渲染并避免重新渲染.
问题1:这是否意味着,componentWillMount如果我们调用setState异步方法的回调(可以是一个promise回调),React会阻止初始渲染,直到执行回调为止?
在 …