gh-pages 上的 React 应用程序:无法链接到本地​​文件

Posted

技术标签:

【中文标题】gh-pages 上的 React 应用程序:无法链接到本地​​文件【英文标题】:React app on gh-pages : can not link to local files 【发布时间】:2019-02-21 09:23:14 【问题描述】:

如果我创建了一个 react 应用程序,并且在这个应用程序中有一个指向本地 html 文件的链接,一旦这个应用程序在 gh-pages 上发布,由于某些原因说链接不会指向任何地方,它只是将用户重定向到在点击链接之前他所在的页面。

例如:

如果我像这样使用 CRA 创建一个简单的应用程序:

App.js

import React,  Component  from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component 
  render() 
    return (
      <div className="App">
        I'm the homepage
        <a id='testlink' href='html2.html'> Go to the second page </a>
      </div>
    );
  


export default App;

在公共文件夹中,我创建了一个新的 html 文件“html2.html”,它只是说

I am the second app !

就是这样,一个简单的应用程序应该在单击链接时从 index.html 跳转到 html2.html。那么这个应用程序在使用npm start 测试时运行良好,如果通过npm run build 提供的静态 html 文件启动它运行良好,但是当部署在 gh-pages 上时,突然链接不会指向任何地方。

Here is the app described above deployed on ghpages

解决此问题的一种方法是在 gh-pages 上分别上传所有应用程序,或使用 react 路由器,但我想知道我是否只是遗漏了一些东西。谢谢你的帮助。

【问题讨论】:

【参考方案1】:

在React 项目上,您应该使用react-router 来处理routes 并更改页面。

简单示例:

import React from "react";
import  BrowserRouter as Router, Route, Link  from "react-router-dom";

const BasicExample = () => (
  <Router>
    <div>
      <ul>
        <li>
          <Link to="/">Home</Link>
        </li>
        <li>
          <Link to="/about">About</Link>
        </li>
        <li>
          <Link to="/topics">Topics</Link>
        </li>
      </ul>

      <hr />

      <Route exact path="/" component=Home />
      <Route path="/about" component=About />
      <Route path="/topics" component=Topics />
    </div>
  </Router>
);

const Home = () => (
  <div>
    <h2>Home</h2>
  </div>
);

const About = () => (
  <div>
    <h2>About</h2>
  </div>
);

const Topics = ( match ) => (
  <div>
    <h2>Topics</h2>
    <ul>
      <li>
        <Link to=`$match.url/rendering`>Rendering with React</Link>
      </li>
      <li>
        <Link to=`$match.url/components`>Components</Link>
      </li>
      <li>
        <Link to=`$match.url/props-v-state`>Props v. State</Link>
      </li>
    </ul>

    <Route path=`$match.url/:topicId` component=Topic />
    <Route
      exact
      path=match.url
      render=() => <h3>Please select a topic.</h3>
    />
  </div>
);

const Topic = ( match ) => (
  <div>
    <h3>match.params.topicId</h3>
  </div>
);

export default BasicExample;

【讨论】:

甚至需要重定向到普通的 html 文件反应路由器?在本地测试但没有托管一次时,它在没有反应路由器的情况下工作是否正常? @Hallemon 是的,SPA 项目需要它。并且在真实主机上不起作用是正常的。

以上是关于gh-pages 上的 React 应用程序:无法链接到本地​​文件的主要内容,如果未能解决你的问题,请参考以下文章

试图将 webpack 推送到 gh-pages

markdown 从主分支上的`dist`文件夹部署到`gh-pages`。适用于[yeoman](http://yeoman.io)。

markdown 从主分支上的`dist`文件夹部署到`gh-pages`。适用于[yeoman](http://yeoman.io)。

Github:将 gh-pages 镜像到 master

Github 上的浏览​​器路由器(React 应用程序)无法正常工作

Dockerized React App 无法绑定到 Heroku 上的 $PORT