useSelect

Performs vertical filtering with SELECT.

import { useSelect } from 'react-supabase'
function Page() {
const [{ count, data, error, fetching }, reexecute] = useSelect('todos')
if (error) return <div>{error.message}</div>
if (fetching) return <div>Loading todos</div>
if (data?.length === 0) return <div>No todos</div>
return ...
}

Passing options

During hook initialization:

const [{ count, data, error, fetching }, reexecute] = useSelect('todos', {
columns: 'id, name, description',
filter: (query) => query.eq('status', 'completed'),
options: {
count: 'exact',
head: false,
},
})

Dynamic filtering

When using dynamic filters, you must make sure filters aren’t recreated every render. Otherwise, your request can get stuck in an infinite loop.

The easiest way to avoid this is to create dynamic filters with the useFilter hook:

import { useState } from 'react'
import { useFilter, useSelect } from 'react-supabase'
function Page() {
const [status, setStatus] = useState('completed')
const filter = useFilter(
(query) => query.eq('status', status),
[status],
)
const [result, reexecute] = useSelect('todos', { filter })
return ...
}