我可以将由wix / react-native-navigation创建的根组件包装在ApolloProvider组件中

时间:2016-10-15 20:32:01

标签: meteor react-native apollostack react-native-navigation

我正在将Meteor的Apollo客户端与wix/react-native-navigation结合使用,我想知道是否可以将Navigation.startSingleScreenApp创建的根组件包装在ApolloProvider组件中?我已经尝试将ApolloProvider放在另一个组件的render方法中并将其封装在Navigation.registerComponent中,但这不起作用。有没有人有过使用这两者的经验?

我想知道注册ApolloProvider的每个组件是否都有自己独立的根组件,如果是这种情况,我必须将a.print()注册的每个组件都包含在内,可能使用更高阶的组件?我很感激任何想法或任何人可以提供的示例代码!提前谢谢。

2 个答案:

答案 0 :(得分:2)

我已经使用更高阶的组件包装每个注册的组件。我用于HOC的代码如下:

import React from 'react';
import appClient  from '../store/apollo';
import { ApolloProvider } from 'react-apollo';

export default function apolloProviderHOC(WrappedComponent){
  return class PP extends React.Component {
    render() {
      return (
        <ApolloProvider client={appClient}>
          <WrappedComponent {...this.props}/>
        </ApolloProvider>
      );
    }
  }
}

只需导入上面的函数,然后将要包装的组件传递给它。

答案 1 :(得分:0)

我发现这个问题的最简单的解决方案就是简单地在registerComponent函数中传递ApolloClient:

Navigation.registerComponent('pm.SplashScreen', () => SplashScreen, store, Provider, {client});

ApolloClient必须被称为“客户端”,因为react-native-navigation在您传递的对象上使用Spread Operator。