From fe7edf08603a892435eb3c30f28055ba5bc02dc0 Mon Sep 17 00:00:00 2001 From: James Ide Date: Fri, 26 Jun 2015 10:25:54 -0700 Subject: [PATCH] [ListView] Defer measurement one frame after componentDidMount to fix error Summary: When `UIManager.measure` is called from `componentDidMount` it causes the error "Attempted to measure layout but offset or dimensions were NaN". Deferring the layout by one frame solves this problem. Layout measurement is already asynchronous anyway, so I believe adding the `requestAnimationFrame` call doesn't affect the program's correctness. Fixes #1749 Closes https://github.com/facebook/react-native/pull/1750 Github Author: James Ide Test Plan: Load UIExplorer and no longer get a redbox that says "Attempted to measure layout but offset or dimensions were NaN". --- Libraries/CustomComponents/ListView/ListView.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Libraries/CustomComponents/ListView/ListView.js b/Libraries/CustomComponents/ListView/ListView.js index dda32340c..cebfac68e 100644 --- a/Libraries/CustomComponents/ListView/ListView.js +++ b/Libraries/CustomComponents/ListView/ListView.js @@ -276,7 +276,9 @@ var ListView = React.createClass({ }, componentDidUpdate: function() { - this._measureAndUpdateScrollProps(); + this.requestAnimationFrame(() => { + this._measureAndUpdateScrollProps(); + }); }, onRowHighlighted: function(sectionID, rowID) {