0

だから私は、テーブルをクエリしてuserIdから、最初のクエリから取得した配列から別のテーブルをクエリしようとしています。

DB は次のようになります (ユーザーは多くのメンバーを持つことができます)。

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クエリに使用する

4

1 に答える 1

0

次のように、マッピング関数と一緒に IN 演算子を使用できます。

const channelFilter = useFilter<DB.Channel>((query) =>
  query.in('id', memberData.map(entry => entry.channelId)).limit(10)
)
于 2021-10-31T18:05:32.787 に答える