+ isLoading ? (
+
...loading
+ ) : (
+ data.map(todo => (
+
{todo.title}
+ ))
+ )
+
+ )
+}
+```
+
+The argument simply gets converted to an API endpoint string, so the above is equivalent to doing
+```javascript
+useQuery('/todos')
+```
+
+As syntactic sugar, you can also pass an array of URL segments.
+```javascript
+useQuery(['todos', 1])
+useQuery(['todos', 1, 'comments'])
+```
+
+To apply refinements such as filtering, pagination, or included resources, pass an object of URL query parameters as the _last_ value of the array. The object gets serialized to a `JSON:API` compatible query string using [qs](https://github.com/ljharb/qs).
+```javascript
+useQuery(['todos', {
+ filter: {
+ complete: 0,
+ },
+ include: [
+ 'comments',
+ ],
+ page: {
+ number: 1,
+ size: 20,
+ },
+}])
+```
+
+If a query isn't ready to be requested yet, pass a _falsey_ value to defer execution.
+```javascript
+const id = null
+const { data: todos } = useQuery(id && ['users', id, 'todos'])
+```
+
+### Normalization
+The API response data gets automatically deserialized into a nested resource structure, meaning this...
+```javascript
+{
+ "data": {
+ "id": "1",
+ "type": "todos",
+ "attributes": {
+ "title": "Clean the kitchen!"
+ },
+ "relationships": {
+ "user": {
+ "data": {
+ "type": "users",
+ "id": "2"
+ }
+ },
+ },
+ },
+ "included": [
+ {
+ "id": 2,
+ "type": "users",
+ "attributes": {
+ "name": "Steve"
+ }
+ }
+ ],
+}
+```
+
+Gets normalized to...
+```javascript
+{
+ id: "1",
+ title: "Clean the kitchen!",
+ user: {
+ id: "2",
+ name: "Steve"
+ }
+}
+```
+
+## Mutations
+To run a mutation, first call the [useMutation](#useMutation) hook with a query key. The return value is a tuple that includes a `mutate` function, and an object with information related to the request. Then call the `mutate` function to execute the mutation, passing it the data to be submitted.
+```javascript
+import { useMutation } from 'jsonapi-react'
+
+function AddTodo() {
+ const [title, setTitle] = useState('')
+ const [addTodo, { isLoading, data, error, errors }] = useMutation('todos')
+
+ const handleSubmit = async e => {
+ e.preventDefault()
+ const result = await addTodo({ title })
+ }
+
+ return (
+