You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13.4.9客户端组件页面跳转时如何传递数据?

在Next.js 13.4.9客户端组件中跳转页面并传递数据完全可行

下面给你两种常用的实现方案,适配你当前的代码场景:

方法1:通过URL查询参数传递(适合简单数据)

这种方式会把数据暴露在URL上,适合传递字符串、数字这类轻量数据。

主页面修改

先从next/navigation导入useRouter,然后在点击事件里拼接查询参数跳转:

'use client'
import { useRouter } from 'next/navigation'

const HomePage = () => {
  const router = useRouter()

  const btnHandler = () => {
    // 示例:传递title和id两个参数
    router.push('/create-upcoming?title=NewContent&id=123')
  }

  return (
    <button onClick={btnHandler} className='border border-[#C4C4C4] rounded-full px-6 py-2 text-[#4B4B4B]'>
      Add Upcoming Content
    </button>
  )
}

export default HomePage

目标页面获取数据

App Router的页面组件可以直接接收searchParams参数,用它来获取传递的值:

const CreateUpcomingPage = ({ searchParams }) => {
  const title = searchParams.title
  const id = searchParams.id

  return (
    <div id="container" className="fixed inset-0 bg-white flex justify-center items-center">
      <div>
        <p>标题:{title}</p>
        <p>ID:{id}</p>
      </div>
    </div>
  )
}

export default CreateUpcomingPage

方法2:通过router.push的state传递(适合复杂/敏感数据)

这种方式数据不会显示在URL中,但页面刷新后数据会丢失,适合传递对象、数组这类复杂数据。

主页面修改

同样导入useRouter,跳转时在第二个参数里传入state:

'use client'
import { useRouter } from 'next/navigation'

const HomePage = () => {
  const router = useRouter()

  const btnHandler = () => {
    // 构造复杂数据
    const contentData = {
      title: 'New Upcoming Content',
      description: 'Test content description',
      tags: ['tech', 'daily']
    }
    // 跳转并携带state数据
    router.push('/create-upcoming', { state: contentData })
  }

  return (
    <button onClick={btnHandler} className='border border-[#C4C4C4] rounded-full px-6 py-2 text-[#4B4B4B]'>
      Add Upcoming Content
    </button>
  )
}

export default HomePage

目标页面获取数据

目标页面需要加上'use client'指令(因为要使用useRouter),然后通过router.state获取数据:

'use client'
import { useRouter } from 'next/navigation'

const CreateUpcomingPage = () => {
  const router = useRouter()
  const contentData = router.state

  return (
    <div id="container" className="fixed inset-0 bg-white flex justify-center items-center">
      {contentData && (
        <div>
          <p>标题:{contentData.title}</p>
          <p>描述:{contentData.description}</p>
          <p>标签:{contentData.tags.join(', ')}</p>
        </div>
      )}
    </div>
  )
}

export default CreateUpcomingPage

内容的提问来源于stack exchange,提问作者Ibnul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:05:13