我正在使用Relay开发一个使用graphql的react-native应用程序。 在早期版本之前,我一直在使用Relay classic和RootContainer以及'sibelius'react-native-relay-example之后的渲染器,并结合这两个帖子:first和 second
所以我已经将react-relay版本从0.10.0更改为1.0.0,并且对于初学者来说,使用中继现代实现在第一个屏幕上进行简单查询。我没有改变babel-relay-plugin。当我运行应用程序时,我得到graphql: Unexpected invocation at runtime. Either the Babel transform was not set up, or it failed to identify this call site. Make sure it is being used verbatim as 'graphql'
我也是使用graphql开发react-native应用程序和整体的初学者所以我有这种不断的感觉我错过了文档中没有提到的内容,我想在使用react时已经知道了。
这是我的.babelrc文件:
{
"plugins": ["./data/babelRelayPlugin"],
"presets": ["react-native"]
}
babelRelayPlugin.js
const getBabelRelayPlugin = require('babel-relay-plugin');
const schemaData = require('./schema.json');
module.exports = getBabelRelayPlugin(schemaData.data);
我正在创建一个RelayEnvironment,我将其导入QueryRenderer:
import {
Environment,
Network,
Store,
RecordSource
} from 'relay-runtime';
const fetchQuery = (operation, variables, cacheConfig, uploadables) => {
return (
fetch('https://../graphql', {
method: 'POST',
headers: {
'content-type': 'application/json'
},
body: JSON.stringify({
query: operation.text,
variables,
}),
}).then( response => {
return response.json();
}).catch( err => console.log(err) )
);
}
const source = new RecordSource();
const store = new Store(source);
const network = Network.create(fetchQuery);
const handlerProvider = null;
export const RelayEnvironment = new Environment({
handlerProvider,
network,
store,
});
这是我在jsx中的QueryRenderer:
<QueryRenderer
environment={ RelayEnvironment }
query={ graphql`query {
content(path: "/latest-updates"){
title
children{
entries{
key: id
title
flyTitle
teaser
mainImageObj{
path
}
}
}
}
}` }
render={ ({error, props}) => {
if(error){
console.log(error);
} else if(props) {
console.log(props);
return <Text> Done </Text> ;
} else {
console.log('loading...');
}
}}
/>
如果我在graphiql中运行此查询,我会得到预期的结果。
答案 0 :(得分:1)
babel-relay-plugin
现在在Relay Modern中babel-plugin-relay
,使用情况不再相同 - see here。
你现在需要3件事:
yarn add -D babel-plugin-relay
- 您不再需要自定义relay-compiler
以下是它的工作原理:
relay-compiler --src ./src --schema path/schema.graphql
__generated__
的文件夹中为您的查询生成定义babel-plugin-relay
通过require()
调用继电器编译器对相应生成的GraphQL定义来替换您的查询 yarn add -D babel-plugin-relay relay-compiler
目录结构
schema.graphql
src/
App.js
.babelrc
package.json
schema.graphql
type Query {
user: User!
}
type User {
name: String!
}
的src / App.js
// ...
const myQuery = graphql`
query App_ExampleQuery {
user {
name
}
}
`;
// ...
.babelrc
{
"plugins": ["relay"]
}
的package.json
...
"scripts": {
"relay": "relay-compiler --src ./src --schema ./schema.graphql --watch",
},
...
然后,在单独的终端中运行yarn relay
或npm run relay
。
像往常一样启动你的应用程序。