Support for a Provider, useMutation, and useQuery
Provider, useMutation, and useQuery
Provider using the GraphQL useMutation and useQuery
The Provider allows us to set a default url, options (such as headers) and so on.
There is array and object destructuring for useMutation and useQuery.
Query for todos
import { Provider, useQuery, useMutation } from 'use-http'
function QueryComponent() {
const request = useQuery(`
query Todos($userID string!) {
todos(userID: $userID) {
id
title
}
}
`)
const getTodosForUser = id => request.query({ userID: id })
return (
<>
<button onClick={() => getTodosForUser('theUsersID')}>Get User's Todos</button>
{request.loading ? 'Loading...' : <pre>{request.data}</pre>}
</>
)
}Add a new todo
This uses array destructuring, but it can also use object destructuring. The useMutation and useQuery are very similar to the usePost's array and object destructuring.
function MutationComponent() {
const [todoTitle, setTodoTitle] = useState('')
const [data, loading, error, mutate] = useMutation(`
mutation CreateTodo($todoTitle string) {
todo(title: $todoTitle) {
id
title
}
}
`)
const createtodo = () => mutate({ todoTitle })
return (
<>
<input onChange={e => setTodoTitle(e.target.value)} />
<button onClick={createTodo}>Create Todo</button>
{loading ? 'Loading...' : <pre>{data}</pre>}
</>
)
}Fetch more todos
function FetchComponent() {
const request = useFetch('/todos')
return (
<>
<button onClick={request.get}>Get Todos</button>
{request.loading ? 'Loading...' : <pre>{request.data}</pre>}
</>
)
}Provider
These props are defaults used in every request inside the <Provider />. They can be overwritten individually
function App() {
const options = {
headers: {
Authorization: 'Bearer:asdfasdfasdfasdfasdafd'
}
}
return (
<Provider url='http://example.com' options={options}>
<QueryComponent />
<MutationComponent />
<FetchComponent />
<Provider/>
)
}