React 路由器 dom 路由已加载到 React Developer 工具中,但路由在浏览器中不起作用

Posted

技术标签:

【中文标题】React 路由器 dom 路由已加载到 React Developer 工具中,但路由在浏览器中不起作用【英文标题】:React router dom routes are loaded onto React Developer tools but the routes are not working in the browser 【发布时间】:2017-11-07 19:51:54 【问题描述】:

我是 React 新手,目前正在研究导航栏。我有 index.js 这是我的启动文件

import React from 'react';
import ReactDOM from 'react-dom';
import BrowserRouter from 'react-router-dom';
import history from 'history';
import Routes from './routes/index';
import Template from './containers/Template';

ReactDOM.render( 
  (
    <BrowserRouter 
        history=history
        routes=Routes
    >
        <Template />
    </BrowserRouter>
  ),document.getElementById('root')
);   

路由是从如下所示的 routes/index.js 文件中导入的

import React from 'react';
import Route, BrowserRouter, Switch from 'react-router-dom';
import Template from '../containers/Template';
import Home from '../containers/Home';
import Profile from '../containers/Profile';

const createRoutes = () => 
  return (
      <BrowserRouter>
      <Switch>
        <Route path= '/' component= Template/>
        <Route path= '/' component=Home/>
        <Route path= '/profile' component=Profile/>  
      </Switch>
      </BrowserRouter>
  )



const Routes = createRoutes();

export default Routes;

我的主要问题是,当我使用 chrome 和 React Developer 工具时,我可以看到与 BrowserRouter 对象相关的路由,如下所示 Routes in the Browser element inspection

但是我无法打开任何指定的路由总是得到“无法获取 /profile”,请注意我使用 webpack 作为 web 开发包。

【问题讨论】:

一个导航栏应该有链接标签的权利,你为什么要为你的导航栏放置一个路由器。路由文件将是不同的,并且独立于任何组件。 我认为这与您将&lt;BrowserRouter /&gt; 传递给自身有关。那我相信你需要指定历史对象import createHistory from 'history/createBrowserHistory'。此外,查看 API &lt;BrowserRouter /&gt; 不接受 history 属性。 reacttraining.com/react-router/web/api/BrowserRouter 谢谢你们两位我刚读了这篇文章是否说明了@VivekN 所说的medium.freecodecamp.com/… 我可以使用react 对象在没有路由器的情况下操作页面 @rockchalkwushock 是的,只是注意到了这一点,但它在添加它时从未说明任何错误,所以我基本上应该创建一个导入历史并扩展它的类.. 【参考方案1】:

这里发生的是您的 webpack-dev-server 正在尝试为您提供一个名为 /profilehtml 页面,因为您使用的是单页应用程序,所以该页面不存在。

看看这个link,但归根结底,这是 webpack-dev-server 的预期行为,因为/profile html 页面不存在。

为了让这种行为发挥作用,你需要实现服务器端渲染,或者你可以使用 React-Router 的哈希位置

【讨论】:

谢谢!!是的,现在它看起来完全正常,但是如果我在 express.js 中添加路由,它会不再是一个单页网站吗?我已经在我的 webpack 配置文件中将 historyApiFallback 设置为 true 您需要做的是将用户重新路由回您的单页应用程序的根目录,并让您的应用程序在客户端执行路由。看看这个answer 应该能帮到你 如果这个答案对你有帮助,如果你接受这个答案,我将不胜感激! 当然,再次感谢您!我目前正在想办法通过反应客户端重新设计我的应用程序,我会继续检查答案,并可能在此处添加一些评论 在***.com/questions/27928372/… 的帮助下,我能够重新路由到我的主页,问题就解决了

以上是关于React 路由器 dom 路由已加载到 React Developer 工具中,但路由在浏览器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 react-router-dom 创建动态路由?

您不应该使用 react-router-dom 在路由器外部使用 Link

反应路由器dom v4 |上下文路由器和路由未定义

react-router-dom 中的 Switch 语句始终加载 Home 路由,没有其他路由

react-router-dom 路由组件需要页面重新加载

从cookie异步加载身份验证令牌时,React react-router-dom私有路由不起作用