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

Next.js中如何将组件输入值传递到getServerSideProps用于搜索接口请求

最优实现方案

核心逻辑

getServerSideProps是服务端运行的方法,无法直接获取客户端组件内的状态,最优方案是将搜索关键词作为URL查询参数携带跳转到搜索结果页,getServerSideProps可以直接从请求上下文中读取URL参数完成接口调用。该方案天然支持搜索结果页分享、书签保存、浏览器前进后退导航,不需要引入额外的状态管理工具,实现成本最低。

代码修改

SearchBar 组件

import { useState } from 'react';
import { useRouter } from 'next/router';

export default function SearchBar() {
  const [keyword, setKeyword] = useState('');
  const router = useRouter();

  const handleClick = (event) => {
    event.preventDefault();
    if (!keyword.trim()) return;
    // 跳转时将关键词作为查询参数传入,使用encodeURIComponent处理特殊字符
    router.push(`/SearchResults?keyword=${encodeURIComponent(keyword.trim())}`);
  };
  return (
    <div>
      <input
        type="text"
        value={keyword}
        onChange={(e) => setKeyword(e.target.value)}
        placeholder="输入搜索关键词"
      />
      <button onClick={handleClick}>Fetch</button>
    </div>
  );
}

SearchResults 页面

import { GetServerSideProps } from 'next';

export const getServerSideProps: GetServerSideProps = async (context) => {
  // 从查询参数中获取关键词
  const keyword = context.query.keyword as string;
  // 无关键词时可返回404或者重定向到首页
  if (!keyword) {
    return {
      notFound: true
    }
  }
  const res = await fetch(
    `https://www.googleapis.com/books/v1/volumes?q=${encodeURIComponent(keyword)}`
  );
  const data = await res.json();

  // 将接口返回的数据传递给页面组件
  return { props: { searchResult: data || [] } };
};

// 页面组件接收props渲染搜索结果
export default function SearchResults({ searchResult }) {
  return (
    <div>
      <h1>搜索结果</h1>
      <ul>
        {searchResult.items?.map(book => (
          <li key={book.id}>{book.volumeInfo.title}</li>
        ))}
      </ul>
    </div>
  );
}

方案优势

  • 实现简单,不需要引入全局状态管理、本地存储等额外逻辑
  • 搜索结果页可直接通过URL访问,支持用户分享、保存书签
  • 符合浏览器原生导航逻辑,前进后退可正常恢复之前的搜索结果
  • 对SEO友好,搜索引擎爬虫可直接抓取带参数的搜索结果页

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:45:03