Next.js,如何将一个表单提交到另一个页面?

Cul*_*lly 9 javascript reactjs next.js

( Next.js ) 我在一页上有一个 GET 表单。我想把它提交到另一个页面。我知道我可以将该action属性设置为其他页面。那个有效。但是,它会重新加载页面,而不仅仅是渲染新页面;如果您在页面上有一个链接而不将其包装在Link组件中,就会发生同样的情况。

我可以捕获提交事件,构建查询,并将其推送到路由器上。但是对于我认为已经弄清楚的事情,这似乎是很多额外的工作。

任何想法如何在不重新发明轮子的情况下做到这一点?

<form method='get' action='/search'>
  <input name='q' placeholder='Search' arial-label='Search' />
</form>
Run Code Online (Sandbox Code Playgroud)

Cul*_*lly 16

我最终捕获了提交事件并将 URL 推送到路由器上。

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

const preventDefault = f => e => {
  e.preventDefault()
  f(e)
}

export default ({action = '/search'}) => {
   const router = useRouter()
   const [query, setQuery] = useState('')

   const handleParam = setValue => e => setValue(e.target.value)

   const handleSubmit = preventDefault(() => {
     router.push({
       pathname: action,
       query: {q: query},
     })
   })

   return (
     <form onSubmit={handleSubmit}>
       <input
         type='text'
         name='q'
         value={query}
         onChange={handleParam(setQuery)}
         placeholder='Search'
         aria-label='Search'
       />
     </form>
   )
}

Run Code Online (Sandbox Code Playgroud)