【问题标题】:Use <Redirect> component to update search param on the current page使用 <Redirect> 组件更新当前页面的搜索参数
【发布时间】:2020-03-19 00:53:54
【问题描述】:

我想在提交表单时更新 URL 中的单个搜索参数。作为 React 和 react-router 的新手,我想给 &lt;Redirect&gt; 组件一个机会,尽管我的直觉告诉我只需使用常规 JavaScript 更新 URL。

初始重定向按预期工作。但是,一旦查询更改,就会发生后续重定向。我只希望在按下提交时发生重定向。

export default function SearchForm () {
  const [ inputQuery, setInputQuery ] = useState<string>(useSearch('query') || '');
  const [ redirect, setRedirect ] = useState(false);

  function search (event: React.FormEvent<HTMLFormElement>) {
    event.preventDefault();

    setRedirect(true);
  }

  return (
    <div>
      <form onSubmit={search}>
        <label>
          Search query
          <input value={inputQuery} onChange={(event) => setInputQuery(event.target.value)} autoFocus />
        </label>

        <button type="submit">Search</button>
      </form>

      {redirect &&
        <Redirect to={`?query=${inputQuery}`} />
      }
    </div>
  );
}

【问题讨论】:

    标签: reactjs redirect react-router


    【解决方案1】:

    您是否有理由将重定向组件与您的表单一起返回?如果你想在提交时重定向,我会使用 react 路由器中的withRouter,然后调用它的history.push()

      function search (event: React.FormEvent<HTMLFormElement>) {
        props.history.push({pathname: '/whatever-page', search: '?query=' + inputQuery})
      }
    
      return (
        <div>
          <form onSubmit={search}>
            <label>
              Search query
              <input value={inputQuery} onChange={(event) => setInputQuery(event.target.value)} autoFocus />
            </label>
    
            <button type="submit">Search</button>
          </form>
        </div>
      );
    
    export default withRouter(SearchForm);
    

    【讨论】:

    • 好吧。我只尝试使用 组件,因为我在多个地方阅读这是推荐的方式。我将研究 withRouter 方法。我的另一个新概念“高阶组件”。顺便提一句;我可以让它与 useHistory() 一起工作。但也不喜欢它,因为我不允许在嵌套函数中使用它。
    猜你喜欢
    • 2019-12-31
    • 2014-12-04
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    相关资源
    最近更新 更多