reactjs 如何使用多个查询参数下一节,js 13?

dhxwm5r4  于 2023-04-29  发布在  React
关注(0)|答案(2)|浏览(126)

我试图创建一个路由,看起来像这样/property1=value1&property2=value2,然后我需要访问property1property2的值。我在pages文件夹的根目录下创建了一个名为[property1]&[property2].js的文件。
我正在尝试通过以下链接访问组件http://localhost:3000/property1=value1&property2=value2

//[property1]&[property2].js

import { useRouter } from "next/router";

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

  return (
    <div>
      HELLO WORLD
    </div>
  );
};

export default Component ;

我尝试测试router.query的内容,并获得以下输出。

console.log(router.query); 
//outputs { property1]&[property2: "property1=value1&property2=value2" }

我正在使用下一个。js版本13.3.1,目前我不喜欢按照文档使用实验性的apps目录。因此,通过pages目录实现此任务的任何解决方案都是目前最受欢迎的。

kuhbmx9i

kuhbmx9i1#

你应该能做到的

const {query} = router;
const {property1, property2} = query;

See docs

yc0p9oo0

yc0p9oo02#

我正在尝试创建一个类似于/property 1 =value1&property2= value 2的路由,然后我需要访问property 1和property 2的值
基于我们试图实现的目标
我创建了一个名为[property 1]和[property 2]的文件。js文件夹的根文件夹。
[property1]&[property2].js不是最好的方法。
如果我没有弄错的话,你想在url中传递搜索参数,并在路由'/'上的组件中访问它们。

如何操作?

NextJs新增13个useSearchParams钩子API

1.将文件[property1]&[property2].js重命名为index.js(假设它位于根路径/)
1.现在你可以将查询参数传递给url示例:/?property1=value1&property2=value2
1.使用useSearchParams钩子在组件中访问这些查询参数
useSearchParams是一个客户端组件钩子,可让您读取当前URL的查询字符串。

import { useSearchParams } from 'next/navigation';
  export default function SearchBar() {
    const searchParams = useSearchParams();
  
    const search = searchParams.get('search');
  
    // URL -> `/dashboard?search=my-project`
    // `search` -> 'my-project'
    return (
      <>Search: {search}</>
    );   
  }

示例

// index.js
import { useSearchParams } from 'next/navigation';

const Component = () => {
  const searchParams = useSearchParams();
  const property1 = searchParams.get('property1');
  const property2 = searchParams.get('property2');

  console.log(property1);   // value1
  console.log( property2); // value1
  return (
    <div>
      HELLO WORLD
    </div>
  );
};

export default Component ;

使用useRouter钩子

您也可以使用useRouter钩子来访问组件中的查询参数:

const Component = () => {
    const router = useRouter();
    const { property1, property2 } = router.query;
  
    console.log(property1);   // value1
    console.log(property2);   // value2
  
    return (
      <div>
        HELLO WORLD
      </div>
    );
  };
  
  export default Component;

编辑

我想你误解了如何在Next中使用dynamic路由。js。如果你想让property1property2成为强制性的,以访问页面,你需要有一个像这样的url /[property1]/[property2]其中property1pages上的一个文件夹,包含一个名为property2.js的js文件。则可以通过使用

// file pages/[property1]/[property2].js
import {useRouter} from "next/router";

export default function IndexPage() {
  const router = useRouter();
  const { property1, property2 } = router.query;
  return (
    <div>
      <p>
        property1: {property1} <br />
        property2: {property2}
      </p>
    </div>
  );
}

相关问题