[ReactNative] Fix Text Updating Crash

Summary:
@public

{D1953613} added an optimization that allowed for shadow nodes that are not
backed by views, but didn't actually work robustly in the remove case because
the indices can get out of sync.  That diff also started returning nil for raw
text nodes, which triggered this bug and broke "see more" functionality in the
`FBTextWithEntities` and `ExpandingText` components, leading to crashes in the
Groups app.

This diff fixes the issue by simply returning `UIView` placeholders again.
Slight perf/ memory cost but no more crashes and there should be no other
adverse affects.

We'll need to think up something more clever in order to properly support `nil`
views in the future, probably something that uses the shadow hierarchy to build
the View hierarchy, rather than mirroring identical commands to both - see
#1102.

Test Plan:
- TextUpdateTest fails without native changes, now passes with them.
- ExpandingText example no longer crashes.
- See More in Groups app no longer crashes.
This commit is contained in:
Spencer Ahrens 2015-05-02 10:09:37 -07:00
parent a4616bff3f
commit 5e110d2776
2 changed files with 2 additions and 5 deletions

View File

@ -17,7 +17,7 @@ RCT_EXPORT_MODULE()
- (UIView *)view
{
return nil;
return [[UIView alloc] init]; // TODO(#1102) Remove useless views.
}
- (RCTShadowView *)shadowView

View File

@ -24,8 +24,6 @@ var {
Text,
} = React;
var MIX_TYPES = false; // TODO(#6916648): fix bug and set true
var TestManager = NativeModules.TestManager || NativeModules.SnapshotTestManager;
var TextUpdateTest = React.createClass({
@ -42,13 +40,12 @@ var TextUpdateTest = React.createClass({
);
},
render: function() {
var extraText = MIX_TYPES ? 'raw text' : <Text>wrapped text</Text>;
return (
<Text
style={styles.container}
onPress={() => this.setState({seeMore: !this.state.seeMore})}>
<Text>Tap to see more (bugs)...</Text>
{this.state.seeMore && extraText}
{this.state.seeMore && 'raw text'}
</Text>
);
},