Запрос реакции в NextJS getStaticPaths

#reactjs #next.js #react-query

Вопрос:

Я хотел бы запросить индивидуальный идентификатор с useQuery помощью крючка, getStaticPaths , и getStaticProps в Next.js. Я получил весь список, однако я не знаю, как получить данные для индивидуального идентификатора? Код для всего списка пользователей приведен ниже:

 import { QueryClient, useQuery } from 'react-query'; import axios from 'axios'  export default function Index() {  const { isLoading, data, isError, error } = useQuery('users', fetchUsers)   if(isLoading){  return lt;h2gt;Loading....lt;/h2gt;  }  if(isError){  returnlt;h2gt;{error.message}lt;/h2gt;  }   return (  lt;gt;  {  data?.data.map(user =gt; {  return lt;div key={user.id}gt;  lt;Link href={`users/${user.id}`}gt;.{user.name}. lt;/Linkgt;  lt;/divgt;  })  }  lt;/gt;  ) }  export async function getStaticProps(dehydratedState) {  const queryClient = new QueryClient()  await queryClient.prefetchQuery('users', fetchUsers)    return {  props: { dehydratedState: dehydrate(queryClient).toString()}  }; }  

Для индивидуальных удостоверений личности ничего не сработало, я оставил ниже: Он выбирает одного пользователя, но не с помощью запроса React.

 import { dehydrate } from 'react-query/hydration' import Link from 'next/link'  const fetchUsers = () =gt; {  return axios.get('https://jsonplaceholder.typicode.com/users') }  function User({ user }){  return (  lt;divgt;{user.name}lt;/divgt;  ) }  export async function getStaticPaths() {  const res = await fetch('https://jsonplaceholder.typicode.com/users')  const users = await res.json()   const paths = users.map((user) =gt; ({  params: { id: user.id.toString() },  }))   return { paths, fallback: false } }  export async function getStaticProps({ params }) {  const res = await fetch(`https://jsonplaceholder.typicode.com/users/${params.id}`)    const user = await res.json()    return { props: { user } } }   export default User  

Третья часть (это единственная выборка идентификатора с гидратом, а не простая Next.js)

 import { QueryClient } from "react-query" import { dehydrate, useQuery } from "react-query" import axios from "axios"  const userIdFetch = (props) =gt; {  return axios.get(`https://jsonplaceholder.typicode.com/users/${props.id}`) }  function User(user){  const { isLoading, data, isError, error } = useQuery(['users', user.id], userIdFetch)  console.log(user)    return (  lt;divgt;lt;/divgt;  ) }   export async function getStaticPaths() {  const res = await fetch('https://jsonplaceholder.typicode.com/users')  const users = await res.json()    const paths = users.map((user) =gt; ({  params: { id: user.id.toString() },  }))    return { paths, fallback: false } }   export async function getStaticProps({ params }) {  const res = await fetch(`https://jsonplaceholder.typicode.com/users/${params.id}`)  const userFetch = await res.json()    const queryClient = new QueryClient()  await queryClient.prefetchQuery('users', userFetch)   return {   props: { dehydratedState: dehydrate(queryClient).toString()}  } }   export default User  

Комментарии:

1. Является User ли компонент страницы (расположен в pages папке)? Вы правильно настроили и упаковали ? ReactQueryCacheProvider Hydrate _app Можете ли вы также показать код этого файла?

2. Итак, первая половина-это pages/users/index.js А для динамических это страницы/пользователи/[идентификатор].js Он извлекает один идентификатор, но не с помощью запроса React. Это работает как выборка NextJS по умолчанию, однако я хочу получить это с помощью обезвоживания.

3. Можете ли вы уточнить, что вы подразумеваете под «ничего не сработало»? Вы получаете какие-либо ошибки? Можете ли вы показать код, который вы пробовали с помощью запроса React.

4. Я приложил это как часть 3. Итак, я пытаюсь получить одного пользователя на основе идентификатора с помощью React-запроса и получить данные этого конкретного пользователя, например, имя, фамилию, телефон и т. Д.

5. В вашем последнем блоке кода userFetch должна быть функция — в настоящее время это обычные данные JSON. Измените userFetch , чтобы это была функция, которая выполняет fetch запрос и возвращает данные JSON.