使用React钩子和Supabase进行多个查询



所以我试图通过userId查询表,然后从我从第一个查询中获得的数组中查询另一个表。

数据库是这样的(一个用户可以有多个成员):

members:
id | userId | channelId | name | ...
channels:
id | ...

但问题是我的第一个查询返回一个数组,我需要循环。我该如何在React中实现这一点?

const useChats = () => {
const [chats, setChats] = useState()
const client = useClient()
const memberFilter = useFilter<DB.Member>((query) =>
// hard coded for now
query.eq('userId', '94a9aa95-c794-404a-9a37-7f424b215ebb').limit(10)
)
const [{ data: memberData }] = useRealtime<DB.Member>('members', {
select: {
columns: 'id, channelId, name, image, read',
filter: memberFilter,
},
})
const channelFilter = useFilter<DB.Channel>((query) =>
// issue is here... how do i query `channel:id` for each member entry?
// memberData is of type `DB.Member[] | null | undefined`
query.eq('id', memberData[0].channelId).limit(10)
)
const [{ data: channelData }] = useRealtime<DB.Channel>('channels', {
select: {
columns: 'id, lastActive, lastMessage',
filter: channelFilter,
},
})
return chats
}
export { useChats }

类型:

export namespace DB {
interface Member {
id: string
userId: string
channelId: string
name: string
image: string
read: boolean
}
interface Channel {
id: string
lastActive: string
lastMessage?: string
}
}

使用react-supabase查询

可以在映射函数旁边使用IN操作符,如下所示:

const channelFilter = useFilter<DB.Channel>((query) =>
query.in('id', memberData.map(entry => entry.channelId)).limit(10)
)

最新更新