【问题标题】:How to set nextjs router query parameter如何设置nextjs路由器查询参数
【发布时间】:2020-01-25 12:17:36
【问题描述】:

我想知道如何在 router.query 中设置或取消设置参数。

在示例中,我有 2 个复选框,当我切换 a 时,我希望查询值 a 切换,而当我切换 b 时,我希望查询值 b 切换。

这是示例代码:

import { useState, useEffect } from "react";
import { withRouter } from "next/router";
import Layout from "../components/Layout";
const Test = ({ router }) => {
  const [query, setQuery] = useState(router.query);
  const changeQuery = val => e =>
    setQuery({ ...query, [val]: e.target.checked });
  const { a, b } = query;
  useEffect(() => {
    //what do I do here to set query param?
  }, [a, b]);
  return (
    <Layout>
      <pre>{JSON.stringify(router.query, undefined, 2)}</pre>
      a:
      <input
        type="checkbox"
        value="a"
        checked={a}
        onChange={changeQuery("a")}
      />
      b:
      <input
        type="checkbox"
        value="b"
        checked={b}
        onChange={changeQuery("b")}
      />
    </Layout>
  );
};
export default withRouter(Test);

【问题讨论】:

    标签: reactjs next.js


    【解决方案1】:

    我可以使用 router.push 设置值,但不确定这是否正确:

    import { withRouter } from 'next/router';
    import Layout from '../components/Layout';
    const removeUndefined = o =>
      Object.entries(o)
        .filter(([, val]) => val!==undefined)
        .reduce((result, [key, val]) => {
          result[key] = val;
          return result;
        }, {});
    
    const Test = ({ router }) => {
      const { pathname, query } = router;
      const { a, b } = query;
      const changeQuery = val => e =>
        router.push({
          pathname,
          query: removeUndefined({
            ...query,
            [val]: e.target.checked ? 1 : undefined,
          }),
        });
      return (
        <Layout>
          <pre>
            {JSON.stringify(query, undefined, 2)}
          </pre>
          a:
          <input
            type="checkbox"
            value="a"
            checked={a}
            onChange={changeQuery('a')}
          />
          b:
          <input
            type="checkbox"
            value="b"
            checked={b}
            onChange={changeQuery('b')}
          />
        </Layout>
      );
    };
    export default withRouter(Test);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-15
      • 2019-12-05
      • 2017-01-16
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多