Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Not able to get Relay work with React Native

I'm trying to setup a basic React Native Relay project. I'm creating this issue after spending ample of time trying debug the problem without any luck. I'm getting this warning on console and my react native app is not able to make calls to GraphQL server.

Warning: RelayNetworkLayer: Call received to injectImplementation(), but a layer was already injected.


Running application "ExampleApp" with appParams: {"rootTag":1,"initialProps":{}}. __DEV__ === true, development-level warning are ON, performance optimizations are OFF

fetchWithRetries(): Still no successful response after 1 retries, giving up.

Here is my code

index.ios.js

import React, { Component } from 'react';
import Relay from 'react-relay';

import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';
import App from './app';
import AppRoute from './route/appRoute';

Relay.injectNetworkLayer(
  new Relay.DefaultNetworkLayer("http://localhost:1337/graphy")
);

class ExampleApp extends Component {
  render() {
    return (
      <Relay.RootContainer
        Component={App}
        route={new AppRoute()}
      />
    );
  }
}

AppRegistry.registerComponent('ExampleApp', () => ExampleApp);

appRoute.js

'use strict';

import Relay from 'react-relay';

export default class extends Relay.Route {
  static queries = {
    page: (Component) => Relay.QL`
      query {
        posts(offset: 0) { ${Component.getFragment('page')} }
      }
    `,
  };

  static routeName = 'AppRoute';
}

app.js

'use strict';

import React, {Component} from 'react';
import Relay from 'react-relay';

import {
  View,
  Text,
} from 'react-native';

class App extends Component {

  render() {
    console.log('props', this.props);
    return(
     <View>
      <Text>Testing</Text>
     </View>
    );
  }
}


export default Relay.createContainer(App, {
  fragments: {
    page: () => Relay.QL`
      fragment on Viewer {
        posts { id, title }
      }
    `,
  }
});

package.json

{
  "name": "ExampleApp",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },
  "dependencies": {
    "babel": "^6.5.2",
    "babel-preset-react-native": "^1.8.0",
    "babel-relay-plugin": "^0.8.1",
    "react": "^0.14.8",
    "react-native": "^0.25.1",
    "react-relay": "^0.8.1"
  }
}

babelRelayPlugin.js

const getBabelRelayPlugin = require('babel-relay-plugin');
const schema = require('../schema.json');

module.exports = { plugins: [getBabelRelayPlugin(schema.data)] };

Here is the full repo link: https://github.com/popstand/react-native-relay-graphql-example

Similar code built with ReactJS and Relay works well on webpage. I'm not able to make it work on React Native. What is possibly going wrong here which is causing this issue?

like image 827
Bilal Budhani Avatar asked May 18 '16 06:05

Bilal Budhani


2 Answers

I would suggest you may check out the F8 App by Facebook. There is definitely a setup script, a main route, a relay container and a schema to be seen.

like image 115
Daniel Schmidt Avatar answered Oct 06 '22 10:10

Daniel Schmidt


It's possible that your GraphQL server is returning a bad response. This happened to me and I solve with debug the server (with this).

You can see the code of this example app in: https://github.com/danielfeelfine/react-native-relay

like image 1
danielfeelfine Avatar answered Oct 06 '22 10:10

danielfeelfine