Грешка при използване на Relay + React Native (create-react-native-app): Грешка при валидиране на GraphQL `Unknown Type Viewer.`

Опитвам се да настроя RN приложение (което е създадено с create-react-native-app) и да го свържа с Relay.

Вече имам следната настройка в моя App.js:

import { StyleSheet, Text, View } from 'react-native'
import Relay, {
  Route,
  RootContainer,
} from 'react-relay'
import PokemonList from './components/PokemonList'

Relay.injectNetworkLayer(
  new Relay.DefaultNetworkLayer('https://api.graph.cool/relay/v1/ciyeih9590fhl0162e5zh1z4h', {
    headers: {
    },
  })
)

class IndexRoute extends Route {
  static queries = {
    viewer: () => Relay.QL`query { viewer }`
  }
  static routeName = 'IndexRoute'
}

export default class App extends React.Component {
  render() {
    return (
      <View style={styles.container}>
        <RootContainer
          Component={PokemonList}
          route={new IndexRoute()}
          renderFetched={(data) => <PokemonList {...this.props} {...data} />}
        />
      </View>
    )
  }
}

PokemonList не прави нищо досега очаквано за отпечатване на viewer.id, което очаквам да бъде заредено от GraphQL API:

import Relay from 'react-relay'

class PokemonList extends React.Component {

  render() {
    console.log(this.props.viewer.id)
    return (
      <View>
        <Text>Hi</Text>
      </View>
    )
  }

}

export default Relay.createContainer(PokemonList, {
  fragments: {
    viewer: () => Relay.QL`
      fragment on Viewer {
        id
      }
    `
  }
})

Използвам този плъгин babel, за да направя схемата си достъпна за Relay при изграждане време.

Изисква да се предостави крайна точка на GraphQL с помощта на един от три метода. Конфигурирах го във файл .graphqlrc така:

{
  "request": {
    "url": "https://api.graph.cool/relay/v1/ciyeih9590fhl0162e5zh1z4h",
    "headers": {
      "Authorization": "xxxxx"
    }
  }
}

Ето как изглежда моята .babelrc:

{
  "presets": ["babel-preset-expo"],
  "env": {
    "development": {
      "plugins": ["transform-react-jsx-source", "react-relay"]
    }
  }
}

Въпреки това, когато стартирам приложението, получавам тази грешка:

Грешка при валидиране на GraphQL Unknown Type "Viewer". във файл .../PokemonList.js. Опитайте да актуализирате схемата си на GraphQL, ако наскоро е добавен аргумент/поле/тип.

Така че ми се струва, че Relay изобщо не получава достъп до моята схема. Може ли някой да каже какво пропускам в настройката си или какво мога да направя за допълнително отстраняване на грешки?

И само за справка, ако това помогне на някого, ето как изглежда моят package.json:

{
  "name": "test",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "babel-plugin-react-relay": "^0.10.0",
    "jest-expo": "^0.3.0",
    "react-native-scripts": "0.0.25",
    "react-test-renderer": "~15.4.1"
  },
  "main": "./node_modules/react-native-scripts/build/bin/crna-entry.js",
  "scripts": {
    "start": "react-native-scripts start",
    "eject": "react-native-scripts eject",
    "android": "react-native-scripts android",
    "ios": "react-native-scripts ios",
    "test": "node node_modules/jest/bin/jest.js --watch"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "expo": "^15.1.0",
    "react": "~15.4.0",
    "react-native": "0.42.3",
    "react-relay": "^0.10.0"
  }
}

person nburk    schedule 28.03.2017    source източник


Отговори (1)


Добре, така че отговорът беше доста прост, изглежда, че настройката ми вече беше правилна, но трябваше да изтрия crna кеша, така че стартирането на rm -rf $TMPDIR/react* и рестартирането на iOS симулатора всъщност вече го направи.

person nburk    schedule 28.03.2017