问题是: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); }
无状态功能组件可以假定不具有这些生命周期方法.这可能是文档所指的,但我不确定.
编辑
删除了回忆的东西,没有回答这个问题或解释好的东西.