Búsqueda de sitios web

reactjs - Consulta perdida al actualizar la página en NextJS


router.query.title desaparece cuando actualizo la página.

Por lo que encontré, tengo que usar getServerSideProps, pero no sé qué escribir en getServerSideProps. ¿O hay alguna forma de hacerlo?

editar: Probé la solución de Yilmaz y quité el as={} ahora funciona. Pero los enlaces de consulta son demasiado largos ahora sin usar as={} ¿alguna solución para esto?

index.tsx

const Projects = () => {
  const [projects, setProjects] = useState(data);

  {projects.slice(0, loadMore).map((project) => (
          <Link
            key={project.id}
            href={{
              pathname: "/projects/" + project.title,
              query: {
                id: project.id,
                category: project.category,
                title: project.title,
                image: project.image.src,
                image1: project.image1.src,
                image2: project.image2.src,
                image3: project.image3.src,
                image4: project.image4.src,
                image5: project.image5.src,
              },
            }}
            as={"/projects/" + project.title}
            passHref={true}
          >
}

[id].tsx

import { GetServerSideProps } from "next";

export const getServerSideProps: GetServerSideProps = async (context) => {
  return {
    props: {},
  };
};

const Details = () => {
  const router = useRouter();

  return (
    <>
      <div className="single__page">
        <div className="single__header">
          <h2>{router.query.title}</h2>
        </div>
      </div>

Respuesta #1

import { NextPageContext } from "next";


export const getServerSideProps: GetServerSideProps = async (context: NextPageContext) => { {
      const { query } = context;
      return { props: { query } };
    }

esto pasará query a las props. Cuando pases el cursor sobre query, ts ya inferirá su tipo como: const query: ParsedUrlQuery

en tu componente

const Details = (props) => {
  // this is object
  const {query}=props
  console.log(query)

  return (
    <>
      <div className="single__page">
        <div className="single__header">
          <h2></h2>
        </div>
      </div>
  • Próxima actualización 13

Si configuras la función experimental appDir: true, todos los componentes en el directorio "app" serán por defecto del lado del servidor. Esos componentes o páginas tienen 2 props por defecto

{ params: { slug: '2' }, searchParams: { title: 'new ' } }

puedes acceder al parámetro de consulta como props.searchParams.title

Segundo enfoque

const Details = () => {
  const [title,setTitle]=useState("")
  const router = useRouter();
  useEffect(() => {
    if (router.isReady) {
      // Code using query
      console.log(router.query);
      // this will set the state before component is mounted
      setTitle(router.query.title)
    }
  }, [router.isReady]);

return (
    <>
      <div className="single__page">
        <div className="single__header">
          <h2>{title}</h2>
        </div>
      </div>
     )
}