重定向到404组件而不更改浏览器中的URL?

时间:2016-10-13 20:29:37

标签: javascript reactjs redux react-router

我正在创建一个通用的redux应用程序,如果用户要求提供不存在的网址,用户将被重定向到404路由,但我有this problem,如果你单击后退按钮,它就不会让你回去吧。

有没有办法在不更改网址的情况下重定向到404路由?

以下是我的路线的样子:

export default (
    <Route path="/" component={App}>
        <IndexRoute component={MainPage} />
        <Route path="venues/:venueName" component={VenueContainer} />
        <Route path="404" component={NotFound} />
        <Route path="*" component={NotFound} />
    </Route>
);

调用此redux操作以重定向:

import { push } from 'react-router-redux';

export default function redirect404() {
    return (dispatch) => {
        dispatch(push('/404'));
    };
}

我现在所拥有的功能,但我可以看到一些用户体验的挫败感。

编辑:我认为这个问题是由带有参数的路线引起的,例如: <Route path="venues/:venueName" component={VenueContainer} />。 React-router看到匹配并且不会重定向到: <Route path="*" component={NotFound} />

我正在从外部API请求数据,如果没有,我想在不更改URL的情况下显示404:

import axios from 'axios';
import redirect404 from './utilActions';

export function fetchVenue() {
    return (dispatch) => {
        dispatch({
            type: 'FETCH_VENUE',
            payload: axios.get('http://externalAPI.com'),
        })
        .catch((error) => {
            console.info(error);
            dispatch(redirect404());
        });
    };
}

2 个答案:

答案 0 :(得分:1)

尝试使用DataGridView代替var book = new Book(); book.Name = nameTextBox.Text; book.Author = authorTextBox.Text; book.ISBN = isbnTextBox.Text; book.Price = int.Parse(priceTextBox.Text); books.Add(book);

  
      
  • push - 将新位置推送到历史记录,成为当前位置
  •   
  • replace - 替换历史记录中的当前位置。
  •   

react-router-redux

replace

答案 1 :(得分:0)

完全删除/404路由,不要重定向。现在,每当您无法匹配路线时,您的用户就会被重定向到/404。您的*路径可以正常运行。