modernize AppContainer and add rootTag in the child context

Summary:
This does 2 things:
- modernize the component to use ES6 + flow
- assign `rootTag` to the child context

Each view in RN has its own `reactTag`. The reactTag for a root view is called `rootTag`. When there are multiple react root views active within the app (e.g. in a hybrid environment), rootTag is the only reliable "label" to differentiate them. This is especially useful when we want to limit an event/activity on a particular root view, instead of affecting all active root views. This allows components to do:

```
class Foo extends React.Component {
  static contextTypes = {
    rootTag: React.PropTypes.number,
  };

  componentDidMount() {
    // Get the root tag of this component, which is static for all components under the same root view
    console.log(this.context.rootTag);
  }
}
```

In a pure JS RN app environment, there will always be exactly 1 root view, so `rootTag` may usually be ignored.

Reviewed By: yungsters

Differential Revision: D4130376

fbshipit-source-id: 559b67615f487bad754b5832ad4a02bcef05be2a
This commit is contained in:
Kevin Gozali
2016-11-06 20:49:10 -08:00
committed by Facebook Github Bot
parent 6c04b3597d
commit fb7fe2d4e8
2 changed files with 72 additions and 40 deletions

View File

@@ -31,7 +31,7 @@ function renderApplication<Props>(
'Expect to have a valid rootTag, instead got ', rootTag
);
ReactNative.render(
<AppContainer>
<AppContainer rootTag={rootTag}>
<RootComponent
{...initialProps}
rootTag={rootTag}