使用Webpack加载查询
您可以加载GraphQL查询.graphql
文件,使用 Webpack。这个包graphql-tag
包含一个易于设置的loader,并提供一些好处:
- 不在客户端处理 GraphQL AST
- 使查询与逻辑分离
在下面的示例中,我们创建了一个名为 currentUser.graphql
的新文件:
query CurrentUserForLayout {currentUser {loginavatar_url}}
您可以在webpack配置文件中添加规则来加载此文件。
module: {rules: [{test: /\.(graphql|gql)$/,exclude: /node_modules/,loader: 'graphql-tag/loader',},],},
如你所见,.graphql
或.gql
文件在导入时将被解析:
import React, { Component } from 'react';import { graphql } from '@apollo/react-hoc';import currentUserQuery from './currentUser.graphql';class Profile extends Component { ... }Profile.propTypes = { ... };export default graphql(currentUserQuery)(Profile)
Jest
Jest不可以使用Webpack加载器。要在Jest中执行相同的转换,请使用jest-transform-graphql。
FuseBox
FuseBox不能使用Webpack加载器。为了在FuseBox中执行相同的转换,请使用fuse-box-graphql-plugin。
React native
React native不能使用Webpack加载器。为了在React native中执行相同的转换,请使用babel-plugin-import-graphql。
Create-React-App
create-react-app 不能使用 Webpack 加载器,除非发布。要在无需发布的 create-react-app
中执行相同的转换,请使用 graphql.macro.
import { loader } from 'graphql.macro';const currentUserQuery = loader('./currentUser.graphql');
片段
您可以在 片段 中使用并包含 graphql 文件,让 Webpack 为您包含这些依赖项,类似于您在纯 JS 中使用带有 gql 标签的片段和查询的方式。
#import "./UserInfoFragment.graphql"query CurrentUserForLayout {currentUser {...UserInfo}}
查看我们是如何导入另一个 .graphql 文件中的 UserInfo 片段(与在 JS 中导入模块相同的方式)。
以下是在另一个 .graphql 文件中定义片段的示例。
fragment UserInfo on User {loginavatar_url}