reactjs – React 0.14的无状态组件将如何提供性能改进,而不需要shouldComponentUpdate?

前端之家收集整理的这篇文章主要介绍了reactjs – React 0.14的无状态组件将如何提供性能改进,而不需要shouldComponentUpdate?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题一直在我头脑中,因为我读到了关于React的发行说明(和其他相关的炒作)0.14 – 我是React的大粉丝,我认为无状态组件( https://facebook.github.io/react/blog/2015/09/10/react-v0.14-rc1.html#stateless-function-components)是一个好主意为了容易地编写这些组件,并且在代码中表达这些组件对于相同的道具数据始终如一地应该是“纯粹的”的意图.

问题是:React如何可以优化这些无状态组件函数,而不需要全身,并且假设道具引用不仅是不可变的,因为它们不应该在组件中被操纵,而且它们永远不会改变在组件生命周期之外? “常规”组件(也称为有状态组件 – 换句话说,通过整个生命周期的组件; componentWillMount,getInitialState等)具有可选的“shouldComponentUpdate”功能的原因是React不会将所有道具和状态引用是完全不可变的.在渲染组件之后,道具引用的某些属性可能会改变,所以相同的“道具”实例稍后可能会有不同的内容.这部分是为什么对使用完全不可变的结构感到兴奋,为什么说使用Om与React可以提供巨大的性能提升;因为所使用的不可变结构保证任何对象的任何给定实例永远不会被突变,所以应该可以在道具和状态(http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/)上执行真正便宜的参考等式检查.

我一直在试图找出更多有关这方面的信息,但没有任何地方.我不能设想可以在无状态组件的情况下进行什么性能改进,而不会假设道具数据将由不变类型组成.也许对非不可变道具类型的一些初步分析可以尝试猜测“道具”和“nextProps”是否代表相同的数据?

我只是想知道有没有人有任何内部信息或其他有启发性的见解.如果React开始要求道具类型“完全不变”(允许参考平等比较来确认数据没有改变),那么我认为这将是一个很大的进步,但也可能是一个很大的变化.

避免不必要的分配

如果我理解正确,无状态功能组件将转换为常规组件.从the source

function StatelessComponent(Component) {
}
StatelessComponent.prototype.render = function() {
  var Component = ReactInstanceMap.get(this)._currentElement.type;
  return Component(this.props,this.context,this.updater);
};

当创建无状态组件的实例时,将分配一个新对象.此新对象具有生命周期方法,如componentWillMount和componentWillReceiveProps.我猜这个计划是根本不创建这些对象.不创建对象将避免不必要的分配.

避免不必要的支票

实现生命周期方法需要像这样的一些检查:

if (inst.componentWillUpdate) {
  inst.componentWillUpdate(nextProps,nextState,nextContext);
}

无状态功能组件可以假定不具有这些生命周期方法.这可能是文档所指的,但我不确定.

编辑

删除了回忆的东西,没有回答这个问题或解释好的东西.

猜你在找的React相关文章