当前位置: 首页 > 面试题库 >

如何使React Router与静态资产,html5模式,历史API和嵌套路由一起使用?

许展鹏
2023-03-14
问题内容

我以为我开始了解React
Router,但是在添加一个为其组件加载CSS的库时,我遇到了新的障碍。当从我的家中导航到包含该组件的页面时,一切正常,但是当我刷新它时,字体的URL损坏了…

我在这里和这里找到了一些指针,但到目前为止还没有运气。这是常见问题吗?如何解决呢?

我将webpack开发服务器与由yeoman脚手架构建的默认配置一起使用。

我使用的库是React Fa来显示图标。

当我在http:// localhost:8000
/
上加载我的应用程序时,一切显示正常,然后导航到http:// localhost:8000 /
customer / ABCD1234 /
chat,我的图标正常。字体已正确加载。

然后刷新页面,然后在控制台中看到:

DOMLazyTree.js?019b:56 GET http:// localhost:8000 / customer / ABCD1234 /
assets /
926c93d201fe51c8f351e858468980c3.woff2

这显然是坏的,因为客户部分不应该在这里…

到目前为止,这是我的路由器:

ReactDOM.render(
  <Router history={browserHistory}>
    <Route path='/' component={App}>
      <IndexRoute component={Index}/>
      <Route path='customer/:id'        component={Customer}    />
      <Route path='customer/:id/chat'   component={CustomerChat}/>
      <Route path="*"                   component={ NotFound }  />
    </Route>
  </Router>
, document.getElementById('support-app'));

我也尝试将a添加<base href="/"/>到我的index.html中,但在控制台中以红色显示了一个很好的警告,因此可能不是最好的主意:

警告:不建议使用“自动设置基本名称”,并将在下一个主要版本中将其删除。的语义与基本名称略有不同。请在createHistory选项中显式传递基本名称


问题答案:

听起来您已经在CSS中定义了资产和图标的相对路径。

background-image: url('assets/image/myicon.png')

相反,请尝试绝对路径:

background-image: url('/assets/image/myicon.png')

由于React应用程序是单页应用程序,并且您在上输入应用程序/,因此无论您浏览的页面是什么,所有URL都可以正常工作,因为它们是相对于您启动的根目录而言的。

但是,一旦您在不同的路径上重新加载页面(例如/customer/ABCD所有资产都将相对于该路径),那么就会在控制台中看到错误的url。

另外,如果使用webpack,您可以尝试publicPath配置文件中进行如下设置:

...
output: {
    path: 'assets',
    publicPath: '/'
},
...


 类似资料:
  • 问题内容: 假设我想要具有大致如下所示的REST端点: 如果可行,对每个对象都使用CRUD。例如,/ user POST创建一个新用户,GET获取所有用户。/ user / user_id GET仅获取该用户。 项目是特定于用户的,因此我将它们放在特定用户 user_id 下。 现在,为了使Express Routing模块化,我制作了一些路由器实例。有一个供用户使用的路由器,以及一个用于物品的路

  • 我的问题是关于在为API目的构建URL时嵌套资源的优势。请考虑以下两种访问员工资源的备选方案: 现在考虑开发一个通用库以从API访问REST资源的任务。如果所有路由都是平坦的,这样的REST包装库只需要知道要访问的资源的名称: 但是,如果我们要支持嵌套路由,这个包装器将需要知道关于嵌套了哪些模型以及在哪个其他资源下的额外信息,以便知道如何构建引用这样一个模型的URL。考虑到并非所有模型都嵌套在同一

  • 我正在尝试将文件的绝对值传递给类路径的read函数。 如果我将绝对路径与类路径一起传递,它就会很好地工作。但当我传递嵌入式表达式时,它不起作用 我的代码如下 给定url appServer给定参数creationMethod=“swagger_first”和路径“/integration/rest/rad” 和头X-CSRF-TOKEN=csrfToken*cookie JSESSIONID=JS

  • 问题内容: 我想将客户端和服务器完全分开,所以我用创建了一个vuejs项目。在这个项目中,我使用vue- router进行所有路由(这包括特殊路径,例如.. 这是我的routes.js文件: 当我运行应用程序时,一切运行正常。我现在准备部署到云,所以我就跑了。由于我需要使用HTTP服务器,因此我决定也使用Go。.这是我的Go文件: 我可以加载似乎一切正常的主页()(css,图像,翻译,对服务器的调

  • 问题内容: 我有以下路由配置: GuaranteeLoggedInContainer为: 但是,历史的推动力:没有用。这里没有历史。 如果我使用这样的配置: 我遇到类似的问题: reactjs中最好的身份验证方法是什么? 问题答案: 从我对您的React Router设计的了解中,您似乎正在使用React Router版本4 在这种情况下,您可以在组件本身中指定路由,并利用withRouter进行

  • 在Martin Fowler的书中,我读到了和模式。 作者提到,将identityMap放在UnitOfWork内部是一个好主意。但怎么做呢? 据我所知,受会话限制,但作者没有提到 每个unitOfWork实例需要多少个IdentityMap实例? 如果我们有两个并发请求呢?