react-router-v4 没有正确重定向

Posted

技术标签:

【中文标题】react-router-v4 没有正确重定向【英文标题】:react-router-v4 not redirecting properly 【发布时间】:2017-11-14 05:24:37 【问题描述】:

我已经将 url 更改为我想要的 url,但我可以让它工作的唯一方法是刷新页面,然后它转到 url。

假设我在 localhost:3000/signin 上,当我登录时,我希望用户被重定向到 localhost:3000/posts 上的帖子页面。当我单击按钮时,我得到 localhost:3000/posts 但页面只停留在登录页面上。我必须点击刷新才能访问该 URL。

**********

编辑:我还注意到,当我在浏览器中向后或向前点击时,它不会呈现,直到我点击刷新。所以这可能是其他问题?我正在使用 react-router-v4。


这是我目前的代码:

这是单击按钮时调用的提交函数:

onSubmit(email, password) 
    this.props.signinUser(email, password, () => 
      this.props.history.push('/posts');
    );
  

这是登录用户操作:

export function signinUser(email, password, cb) 
  return function(dispatch) 
    axios.post(`$ROOT_URL/signin`, email, password)
      .then((response) => 
        dispatch(type: AUTH_USER);
        console.log(response);
        localStorage.setItem('token', response.data.token);
        cb();
      )
      .catch(() => 
        dispatch(authError('bad login info'));
      )
  

【问题讨论】:

看到这个答案***.com/questions/43351752/… 我没有遇到和他一样的问题。如果 url 显示 localhost:3000/signup 或者我在 this.props.history 时点击刷新,我可以通过手动刷新来手动导航到这些页面.push('/post') 将 url 更改为 localhost:3000/post。这就是我必须在 url 中点击刷新或硬输入才能使其工作的问题。 话虽如此,用withRouter 包装你的组件,看看是否有帮助。它确实帮助了我 它仍然只是改变了 url 但视图没有改变。我将组件包装在组件文件中。这是正确的方法吗? 您还有其他解决方案吗? 【参考方案1】:

你可以试试这个,这应该可以。

this.history.pushState(null, '/posts');

如果您使用的是浏览器历史记录

  this.context.router.push('/posts');  or  browserHistory.push('/login');

【讨论】:

this.history 未定义。我正在使用 react-router-v4 或 react-router-dom,这意味着我正在使用 BrowserRouter 你试过这个 this.context.router.push('/posts');或 browserHistory.push('/login'); 这两个都不起作用,我认为唯一可行的方法是如果我使用的是 react-router 版本 3,而我不是。我正在使用 react-router-dom 或 react-router 版本 4【参考方案2】:

做到这一点的一种方法是在某处你有项目“isLoggedin”或类似的东西。如果该项目为 false,则您通常使用编辑框呈现登录路由以输入用户信息。当 isLoggedIn 状态更改为 true 时,您将登录路由呈现为如下所示:

<Redirect to="/posts"/>

你走吧!

【讨论】:

以上是关于react-router-v4 没有正确重定向的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 - 升级身份验证后没有正确重定向

在Drupal中重置密码功能页面没有正确重定向

使用 react-router-v4 对路由执行身份验证

页面没有正确重定向 - Laravel 7

重定向 301:带有参数但没有值的 URL

维护页面重定向的正确状态代码?