GraphQL — это и язык запросов для API, и среда выполнения, которая удовлетворяет вашим запросам данных. GraphQL предоставляет полное и простое для понимания описание данных в вашем API, позволяя клиентам получать именно те данные, которые им нужны, без какой-либо избыточности.
GraphQL имеет серверные реализации для разных языков, чтобы помочь разработчикам создаватьGraphQL Server.
а такжеgq-loaderЯвляетсяwebpackПлагин, вы можете думать об этом как о своего рода интерфейсном проектеclientОн разработан, чтобы облегчить интерфейсным разработчикам вызов GraphQL API, что делает использование GraphQL более удобным для внешних разработчиков, как и обычныхjsтак же просто, как модули, что позволяет разработчикам переднего планаjsчерез файлimportилиrequireимпорт.gqlа также.graphqlфайл, а затем вызвать напрямую. а также поддерживает#importСинтаксис импорта другой.gqlфайлы, такие как фрагменты.
#importТакже предоставляются два псевдонима, а именно#requireа также#include, два псевдонима и#importИспользование и поведение точно такие же.
Следуйте или используйте gq-loader, посетите GitHub:GitHub.com/Houfeng/Past-…
Чтобы узнать больше или использовать graphql, пожалуйста, пойдитеGitHub.com/Facebook/личные…
Установить
npm install gq-loader --save-dev
или
yarn add gq-loader
основное использование
Как и другие загрузчики, во-первых, мыwebpack.config.jsдобавлено вgq-loaderКонфигурация
{
test: /\.(graphql|gql)$/,
exclude: /node_modules/,
use: {
loader: 'gq-loader'
options: {
url: 'Graphql Server URL'
}
}
}
Тогда мы можемjsчерез файлimportимпортировать.gqlФайл использует его, возьмем простой пример, предположим, что уже есть рабочийGraphql Server, затем мы сначала создаем пользователя запросаgetUser.gql
#import './fragment.gql'
query MyQuery($name: String) {
getUser(name: $name)
...userFields
}
}
Видно, что мы проходим#importпроцитировал другой.gqlдокументfragment.gql, в этом файле мы описываем возвращаемую информацию о поле пользователя, чтобы мы могли "переиспользовать" его в разных местах, мы также создаем этот файл
fragment userFields on User {
name
age
}
Ну, мы можемjsИмпорт прямо из файлаgetUser.gql, и опрашивать пользователей с его помощью никогда не было так просто, давайте посмотрим
import getUser from './getUser.gql';
import React from 'react';
import ReactDOM from 'react-dom';
async function query() {
const user = await getUser({ name: 'bob' });
console.log('user', user);
}
function App() {
return <button onClick={query}>click</button>;
}
ReactDOM.render(<App />, document.getElementById('root'));
вызовgetUserКогда , мы можем задать параметр функции дляGraphQLПередайте переменные, которые являются параметрами нашего запроса.
индивидуальный запрос
По умолчаниюgq-loaderпоможет тебе закончитьgraphql 请求, но в некоторых случаях вы можете захотеть контролировать все запросы самостоятельно, если есть такая необходимость, мы также можем передатьrequestсвойства для "кастомизации" запроса, смотрите на примере, нужно сначала его немного изменитьloader 配置
{
test: /\.(graphql|gql)$/,
exclude: /node_modules/,
use: {
loader: 'gq-loader'
options: {
url: 'Graphql Server URL',
//指定自动请求模块路径
request: require.resolve('your_request_module_path');
}
}
}
существуетyour_request_module_pathЗаполните путь к пользовательскому модулю запроса,gq-loaderСоответствующий модуль запроса будет автоматически загружен и использован. Модулю нужно только изменить «функцию запроса», см. следующий пользовательский пример.
const $ = require('jquery');
//url 是要请求的 GraphQL 服务地址
//data 是待发送的数据
//options 是自定义选项
module.exports = function(url, data, options){
//如果有需要还可以处理 options
return $.post(url, data);
};
в,optionsимпорт.gqlПосле файла "второй параметр функции", например, можно передать такoptionsпараметр
import getUser from './getUser.gql';
async function query() {
const options = {...};
const user = await getUser({ name: 'bob' }, options);
console.log('user', user);
}
полные варианты
| имя | иллюстрировать | По умолчанию |
|---|---|---|
| URL | Укажите URL службы graphql | /graphql |
| request | функция пользовательского запроса | Используйте встроенные модули |
| extensions | Расширение по умолчанию, когда расширение опущено при импорте, оно будет искаться по порядку по конфигурации | .gql/.graphql |
| string | Указывает режим импорта, когда истинный импорт представляет собой строки, а не исполняемые функции. | false |
Уведомление,gq-loaderизextensionsНезависимо от того, какое значение настроено, вjsсерединаimportрасширение нельзя опускать, эта опция работает только.gqlдокументimportразное.gqlдокумент