React native:使用多个模块包装导出默认应用程序

React native: export default App with multiple module wraps

我的 React Native 项目中有以下 App.js:

class App extends Component {

    render() {
        return (
          <ApolloProvider store={store} client={client}>
        <AppWithNavigationState />
        </ApolloProvider>

      );
    }

}
export default App = codePush(App);

我正在尝试将 aws amplify authenticator 添加到我的项目 (https://github.com/aws/aws-amplify/blob/master/media/quick_start.md#react-native-development),但步骤告诉我添加:

export default withAuthenticator(App);

^^ 当我已经将 codePush 包裹在我正在导出的 App 组件中时,我该怎么做?

TL;DR: withAuthenticator 基本上是一个 higher order component ,它接受一个组件,对其进行装饰(即提供一些特殊的道具或各种定制)和 returns 一个由您传入的组件组成的新组件。所以在你的情况下,如果你想要多个 HOC,你可以简单地说 -

export default withAuthenticator(codePush(App))

如果你有,比如说,5 个装饰器,从可读性的角度来看,这种语法可能会变得很糟糕。在这种情况下使用新的装饰器语法很有用。有了它,你可以做一些整洁的事情,比如 -

@mySpecialDecoratorThatDoesNiceThings
@withAuthenticator
@codePush
export default class App extends Component {
...
}

如果您使用的是 babel,请查看此 transform-decorators babel 插件以确保装饰器已正确转译。