reactjs - 如何从当前路由中删除查询参数?

标签 reactjs react-router history.js

我有一个 /cart接受几个名为 validate 的查询参数的路由和 email .它们仅在用户未登录时使用,并且在用户登录时是不必要的。在后一种情况下,我想从 URL 中删除它们。

这是我现在的 onEnter /cart 的函数路线:

const requireCartLogin = (props, replace) => {
    const { email, validate } = props.location.query;

    // Exit process if the 'validate' query isn’t present.
    if (typeof validate === 'undefined') { return; }

    if (!isAuthenticated() || requiresReauthentication()) {
        replace({
            pathname: '/account/signin',
            query: { step: 'signin' },
            state: {
                email: typeof email !== 'undefined' ? email : null,
                auth: true,
                next: '/cart'
            }
        });
    } else if (isAuthenticated()) {
        replace({
            pathname: '/cart',
            query: null
        });
    }
};

条件的第二部分应该删除查询参数,但它目前不起作用。我在这里缺少什么?

最佳答案

看看 Dimitry Dushin 的 example

创建 2 个实用函数,如下所示:

import { browserHistory } from 'react-router';

/**
 * @param {Object} query
 */
export const addQuery = (query) => {
  const location = Object.assign({}, browserHistory.getCurrentLocation());

  Object.assign(location.query, query);
  // or simple replace location.query if you want to completely change params

  browserHistory.push(location);
};

/**
 * @param {...String} queryNames
 */
export const removeQuery = (...queryNames) => {
  const location = Object.assign({}, browserHistory.getCurrentLocation());
  queryNames.forEach(q => delete location.query[q]);
  browserHistory.push(location);
};

并使用它来操作查询,如下所示:
import { withRouter } from 'react-router';
import { addQuery, removeQuery } from '../../utils/utils-router';

function SomeComponent({ location }) {
  return <div style={{ backgroundColor: location.query.paintRed ? '#f00' : '#fff' }}>
    <button onClick={ () => addQuery({ paintRed: 1 })}>Paint red</button>
    <button onClick={ () => removeQuery('paintRed')}>Paint white</button>
  </div>;
}

export default withRouter(SomeComponent);

请注意,这在 react-router 的 >v4 中不起作用.

关于reactjs - 如何从当前路由中删除查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50952473/

相关文章:

javascript - 如何从数组中删除索引以对特定点击使用react

reactjs - 在 React Router v4 中为路由添加前缀

javascript - 如果使用 React Router Dom 不存在 slug,如何重定向到未找到的页面?

react-router - React Router v4 - 如何检测后退按钮导航与 url 刷新?

jquery - History API html5,如何知道用户何时点击下一个/后退浏览器按钮?

javascript - 如何在React Native ART中绘制圆 Angular 矩形

javascript - 使用 redux-form 异步加载数据不起作用

javascript - React Native 无法解决错误

javascript - Meteor 的 Accounts.onEmailVerificationLink 与 React 和 React Router

javascript - History.js - 直接访问时检测状态?