小编Yad*_*ran的帖子

反应功能无状态组件,PureComponent,Component; 有什么区别,什么时候应该使用什么?

才知道,从阵营v15.3.0,我们有一个新的名为基类PureComponent与扩展PureRenderMixin内置.我所理解的是,在引擎盖下,它采用了内部道具的浅层比较shouldComponentUpdate.

现在我们有3种方法来定义React组件:

  1. 功能无状态组件,不扩展任何类
  2. 扩展PureComponent类的组件
  3. 扩展Component类的普通组件

一段时间后,我们习惯将无状态组件称为纯组件,甚至是哑组件.似乎"纯"这个词的整个定义现在在React中已经改变了.

虽然我理解这三者之间的基本差异,但我仍然不确定何时选择什么.还有什么是性能影响和权衡取舍?


更新:

这些是我希望澄清的问题:

  • 我应该选择将我的简单组件定义为功能(为简单起见)还是扩展PureComponent类(为了性能)?
  • 性能提升是否因为我丢失的简单性而得到了真正的平衡?
  • Component当我总能使用PureComponent以获得更好的性能时,我是否需要扩展普通类?

javascript ecmascript-6 reactjs

181
推荐指数
3
解决办法
4万
查看次数

构造函数与componentWillMount; componentWillMount可以做什么,构造函数不能?

据我所见,唯一componentWillMount可以做的constructor就是打电话setState.

componentWillMount() {
    setState({ isLoaded: false });
}
Run Code Online (Sandbox Code Playgroud)

由于我们尚未调用render,因此setStatecomponentWillMount进入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().

怎么样setStatecomponentWillMount?根据React文档:

componentWillMount()在安装发生之前立即调用.之前调用它render(,因此在此方法中设置状态不会触发重新渲染.避免在此方法中引入任何副作用或订阅.

所以,在这里我认为React将使用新的状态值进行第一次渲染并避免重新渲染.

问题1:这是否意味着,componentWillMount如果我们调用setState异步方法的回调(可以是一个promise回调),React会阻止初始渲染,直到执行回调为止?

在 …

javascript constructor class ecmascript-6 reactjs

37
推荐指数
1
解决办法
2万
查看次数

标签 统计

ecmascript-6 ×2

javascript ×2

reactjs ×2

class ×1

constructor ×1