跳到主要内容

方法

提供了各种urql调用方法可在页面中或者方法中使用

gql

import { gql } from "@knockout-js/ice-urql/request";

const TodosQuery = gql`
query {
todos {
id
}
}
`;

useQuery

提供query的hook方法与urql使用一致,instanceName通过context传值

示例:

import { useQuery } from "@knockout-js/ice-urql/runtime";

const TodosQuery = gql`
query {
todos {
id
}
}
`;

const Todos = () => {
const [result, reexecuteQuery] = useQuery({
query: TodosQuery,
context: {
instanceName: 'ucenter'
}
});
const { data, fetching, error } = result;
if (fetching) return <p>Loading...</p>;
if (error) return <p>Oh no... {error.message}</p>;
return (
<ul>
{data.todos.map(todo => (
<li key={todo.id}>{todo.title}</li>
))}
</ul>
);
};

usePaging

提供query的hook方法与urql使用一致,instanceName通过context传值

示例:

import { usePaging } from "@knockout-js/ice-urql/runtime";

const TodosQuery = gql`
query {
todos {
id
}
}
`;

const Todos = () => {
const [result, reexecuteQuery] = usePaging({
query: TodosQuery,
current: 1,
context: {
instanceName: 'ucenter'
}
});
const { data, fetching, error } = result;
if (fetching) return <p>Loading...</p>;
if (error) return <p>Oh no... {error.message}</p>;
return (
<ul>
{data.todos.map(todo => (
<li key={todo.id}>{todo.title}</li>
))}
</ul>
);
};

useMutation

提供mutation的hook方法与urql使用一致,instanceName通过context传值

示例:

import { useMutation } from "@knockout-js/ice-urql/runtime";

const UpdateTodo = `
mutation ($id: ID!, $title: String!) {
updateTodo (id: $id, title: $title) {
id
title
}
}
`;

const Todo = () => {
const [updateTodoResult, updateTodo] = useMutation(UpdateTodo);

const submit = newTitle => {
const variables = { id: 1, title: newTitle || '' };
const context = { context: { instanceName: 'ucenter' } }
updateTodo(variables,context).then(result => {
// The result is almost identical to `updateTodoResult` with the exception
// of `result.fetching` not being set.
// It is an OperationResult.
});
};
};

useSubscription

提供subscription的hook方法与urql使用一致,instanceName通过context传值

示例:

import { useSubscription } from "@knockout-js/ice-urql/runtime";

const newMessages = `
subscription MessageSub {
newMessages {
id
from
text
}
}
`;

const handleSubscription = (messages = [], response) => {
return [response.newMessages, ...messages];
};

const Messages = () => {
const [res] = useSubscription({ query: newMessages, context: { instanceName: 'ucenter'} }, handleSubscription);

if (!res.data) {
return <p>No new messages</p>;
}

return (
<ul>
{res.data.map(message => (
<p key={message.id}>
{message.from}: "{message.text}"
</p>
))}
</ul>
);
};

getInstance

根据instanceName获取urql的client和配置

instanceName不传入默认取default

import { getInstance } from "@knockout-js/ice-urql/request";

getInstance("ucenter");

query

执行query时使用,与 urql的client.query一致

instanceName不传入默认取default

import { query } from "@knockout-js/ice-urql/request";

query('', {}, { instanceName: 'ucenter'} );

paging

执行分页时使用 特殊处理了p的传入是knockout后端封装分页接口的相关处理调用

instanceName不传入默认取default

import { paging } from "@knockout-js/ice-urql/request";

paging('', {}, 1,{ instanceName: 'ucenter'} );

mutation

执行mutation时使用

instanceName不传入默认取default

import { mutation } from "@knockout-js/ice-urql/request";

mutation('', {}, { instanceName: 'ucenter'} );

subscription

执行subscription时使用

instanceName不传入默认取default

import { subscription } from "@knockout-js/ice-urql/request";

subscription('', {}, { instanceName: 'ucenter'} ).subscribe((result) => {
// 订阅消息后收到的推送
});