当前位置: 首页 > 知识库问答 >
问题:

react-router的奇怪导航问题

钱经业
2023-03-14

我有一个相当基本的登录设置(代码如下),其中一些组件需要身份验证。当我导航到http://localhost:8000/时,它会重定向到http://localhost:8000/login,一切正常。如果我随后登录,它将返回到http://localhost:8000/并显示我的主要组件。

但是,当我直接导航到http://localhost:8000/login时,它显示“不能GET/login”。我的“about”组件也是如此。当我添加一个磅符号:http://localhost:8000/#/login时,它确实有效。有人能解释一下这是怎么回事吗?

var React = require('react');
var Main = require('./components/main');
var Login = require('./components/login');
var About = require('./components/about');
var SessionStore = require('./stores/session-store')
import createBrowserHistory from 'history/lib/createBrowserHistory';

import { Router, Route, Link, History, IndexRoute } from 'react-router';

var App = React.createClass({

    render: function() {
        return <div>
          {this.props.children}
        </div>
      }
});

function requireAuth(nextState, replaceState) {
  if(!SessionStore.isLoggedIn()){
    replaceState({ nextPathname: nextState.location.pathname }, '/login');
  }
}

function redirectIfLoggedIn(nextState, replaceState){
  if(SessionStore.isLoggedIn()){
    replaceState({ nextPathname: nextState.location.pathname }, '/');
  }
}

var routes = (
  <Router history={createBrowserHistory()}>
    <Route path="/" component={App}>
      <IndexRoute component={Main} onEnter={requireAuth}/>
      <Route path="login" component={Login} onEnter={redirectIfLoggedIn} />
      <Route path="about" component={About} onEnter={requireAuth} />
    </Route>
  </Router>
)

React.render(routes, document.querySelector('.container'));

共有1个答案

满博
2023-03-14

快速回答,http://localhost:8000/#/login在浏览器中的javascript应用程序中运行,因此该应用程序是由express web服务器从/提供的,因此/(app)#/login//about不是从服务器请求任何东西,而是JS应用程序中的路由(react-routes)来呈现各种组件。当您直接输入/login时,必须查询express web服务器,但是除了在根/上为应用程序服务的路由之外,您没有设置任何express服务器路由。

下面是react-routes,一个相关的问题是如何删除它,但请注意,从10月15日开始,react-router从0.13版本改为1.0版本,这对API的改变相当大,所以在阅读示例时要小心,以了解版本如何在浏览器中使用react-router停止/#/?

 类似资料:
  • 问题内容: 这是目录树: 在main.go中: 在client_test.go中: 错误: 我已经阅读了如何在golang中使用自定义软件包?而且我认为我有和这个人一样的解决方案,但是我只是不知道如何解决这个问题。请帮忙。 去环境: 问题答案: 命令去,测试包。 名称与文件模式“ * _test.go”匹配的文件可以包含测试函数,基准函数和示例函数。 不要使用保留名称。例如,将与贯穿始终。

  • 问题内容: 通过使用我可以使用元素创建由React Router本机处理的链接。 我在内部看到它的呼唤。 我想导航。不是来自链接,而是来自下拉菜单(例如)。如何在代码中执行此操作?什么啊 我看到了mixin,但是如果没有,我可以这样做吗? 问题答案: 带有钩子的React Router v5.1.0 如果您使用React> 16.8.0和功能组件,则React Router> 5.1.0中会有一个

  • 我有一个类似Android Studios的应用程序导航抽屉活动: 我的活动使用Android架构导航组件 到目前为止,一切正常。返回时问题开始: 让我们想象我从“家”——片段甲——导航 Android Studio示例正确运行:C- 我的实现没有:它只是弹出后台C- 我该怎么弥补? 缩小主布局: 导航图: 与我的主要活动onCreate相关的所有导航:

  • 我查看了下面的帖子,虽然它给出了几种不同的解决方案,但似乎都不能解决我的问题。 使用react router V4,我需要通过编程从树中的组件中导航,这些组件将无法访问传递的路由器道具(历史记录、url、参数等)。最直接的方法是什么?

  • 我需要一些关于react原生应用程序的社区建议。我是一个全新的人,不理解其中的一些基本区别。 关于反应本地文档创建StackNavigator的示例建议如下:从“反应导航堆栈”导入{createStackNav导航仪}; 我发现很多人使用下面的样式导入{堆栈导航器,Tab导航器}从“反应导航”; 为什么人们使用以上两种不同的风格?哪一个更合适,为什么? react-navigation-stack

  • 问题内容: 我刚刚从v3 替换为v4。 但是我不确定如何以编程方式在的成员函数中进行导航。即在功能上我想导航到处理一些数据后。我曾经通过以下方式做到这一点: 但是我在v4中找不到这样的接口。 如何使用v4导航? 问题答案: 如果您定位到浏览器环境,则需要使用package而不是。他们按照相同的方法作出反应那样,以核心分开,( )和特定于平台的代码,( ,用细微的差别,你并不需要安装两个独立的包),