From b505fdb57d10c0a0d723f4fb648b135ec2e39ae4 Mon Sep 17 00:00:00 2001 From: Olivier Notteghem Date: Sun, 17 Apr 2016 15:03:43 -0700 Subject: [PATCH] Decrease TTRR (time to relay request) by lazy rendering fake group header Reviewed By: astreet Differential Revision: D3155945 fb-gh-sync-id: b8ab8934555428aef98901288edc66d9ef251d96 fbshipit-source-id: b8ab8934555428aef98901288edc66d9ef251d96 --- Libraries/Components/LazyRenderer.js | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 Libraries/Components/LazyRenderer.js diff --git a/Libraries/Components/LazyRenderer.js b/Libraries/Components/LazyRenderer.js new file mode 100644 index 000000000..fff11fe89 --- /dev/null +++ b/Libraries/Components/LazyRenderer.js @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2015-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule LazyRenderer + */ +'use strict'; + +var React = require('React'); +var TimerMixin = require('TimerMixin'); + +var LazyRenderer = React.createClass({ + mixin: [TimerMixin], + + propTypes: { + render: React.PropTypes.func.isRequired, + }, + + componentWillMount: function(): void { + this.setState({ + _lazyRender : true, + }); + }, + + componentDidMount: function(): void { + requestAnimationFrame(() => { + this.setState({ + _lazyRender : false, + }); + }); + }, + + render: function(): ?ReactElement { + return this.state._lazyRender ? null : this.props.render(); + }, +}); + +module.exports = LazyRenderer;