[英]React-Router, Problems with gh-pages
我正在尝试在 GitHub 页面上部署一个 create-react-app。 I'm using react-router-dom and I've set homepage to " http://username.github.io/myproject " in packages.json but I got github 404 when I try to enter a path directly " https:/ /username.github.io/myproject/About “如果我输入错误的路径名,它将引导我到我的自定义 NoMatch 页面” https://username.ZBF215181B5140523254AZ.io/myproject/6
我的 App.js 文件
import React from 'react';
import './App.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import { BrowserRouter as Router, Route, Switch} from 'react-router-dom';
import NavigationBar from './components/NavigationBar';
import { Footer } from './components/Footer';
import { Home } from './Home';
import { NoMatch } from './NoMatch';
import { Contact } from './Contact';
import { About } from './About';
import { Partners } from './Partners';
import { Projects } from './Projects';
import Services from './Services';
function App() {
return (
<React.Fragment>
<NavigationBar/>
<Router basename="/project-se">
<Switch>
<Route exact path="/" component={Home}/>
<Route path="/About" component={About} />
<Route path="/Services" component={Services} />
<Route path="/Projects" component={Projects} />
<Route path="/Partners" component={Partners} />
<Route path="/Contact" component={Contact} />
<Route component={NoMatch} />
</Switch>
</Router>
<Footer />
</React.Fragment>
);
}
export default App;
这是我的导航组件
import React from 'react';
import { Nav, Navbar } from 'react-bootstrap';
import styled from 'styled-components';
const Styles= styled.div`
.navbar-brand,
.navbar-nav .nav-item .nav-link {
color: #fff;
&:hover {
color: #fb7840;
}
}
.navbar-toggle-icon {
background-image: url("data:image/svg+xml;");
color:#fff;
}
`;
export default function NavigationBar() {
return (
<Styles>
<Navbar variant="dark" expand="lg" sticky="top" style={{backgroundColor: "#000", color: "#fff", borderBottom: "1px solid #fb7840"}}>
<Navbar.Brand href="/" style={{ fontSize: "24px", fontWeight: "10em" }}>SARWAR ENTERPRISES</Navbar.Brand>
<Navbar.Toggle aria-controls="responsive-navbar-nav" className="toggler"/>
<Navbar.Collapse id="responsive-navbar-nav">
<Nav className="ml-auto">
<Nav.Item><Nav.Link href="/">HOME</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="/About">ABOUT</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="/Services">SERVICES</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="/Projects">PROJECTS</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="/Partners">PARTNERS</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="/Contact">CONTACT</Nav.Link></Nav.Item>
</Nav>
</Navbar.Collapse>
</Navbar>
</Styles>
);
}
您可以设置基地 url
<Router basename={process.env.PUBLIC_URL}>
</Router>
例如:
<BrowserRouter basename="/calendar" />
<Link to="/today"/> // renders <a href="/calendar/today">
这里解决的问题是我的代码我用 HashRouter 替换了 BrowserRouter 并在 Nav.Link 中添加了确切的地址
** 我的 App.js 文件**
import React from 'react';
import './App.css';
import 'bootstrap/dist/css/bootstrap.min.css';
import { HashRouter as Router, Switch, Route} from 'react-router-dom';
import NavigationBar from './components/NavigationBar';
import { Footer } from './components/Footer';
import { Home } from './Home';
import { NoMatch } from './NoMatch';
import { Contact } from './Contact';
import { About } from './About';
import { Partners } from './Partners';
import { Projects } from './Projects';
import Services from './Services';
function App() {
return (
<React.Fragment>
<NavigationBar/>
<Router basename="/project-se">
<Switch>
<Route exact path="/" component={Home}/>
<Route path="/About" component={About} />
<Route path="/Services" component={Services} />
<Route path="/Projects" component={Projects} />
<Route path="/Partners" component={Partners} />
<Route path="/Contact" component={Contact} />
<Route component={NoMatch} />
</Switch>
</Router>
<Footer />
</React.Fragment>
);
}
export default App;
这是我的导航组件
import React from 'react';
import { Nav, Navbar } from 'react-bootstrap';
import styled from 'styled-components';
const Styles= styled.div`
.navbar-brand,
.navbar-nav .nav-item .nav-link {
color: #fff;
&:hover {
color: #fb7840;
}
}
.navbar-toggle-icon {
background-image: url("data:image/svg+xml;");
color:#fff;
}
`;
export default function NavigationBar() {
return (
<Styles>
<Navbar variant="dark" expand="lg" sticky="top" style={{backgroundColor: "#000", color: "#fff", borderBottom: "1px solid #fb7840"}}>
<Navbar.Brand style={{ fontSize: "24px", fontWeight: "10em" }}>SARWAR ENTERPRISES</Navbar.Brand>
<Navbar.Toggle aria-controls="responsive-navbar-nav" className="toggler"/>
<Navbar.Collapse id="responsive-navbar-nav">
<Nav className="ml-auto">
<Nav.Item><Nav.Link href="https://example.com/project-se/#/">HOME</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="https://example.com/project-se/#/About">ABOUT</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="https://example.com/project-se/#/Services">SERVICES</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="https://example.com/project-se/#/Projects">PROJECTS</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="https://example.com/project-se/#/Partners">PARTNERS</Nav.Link></Nav.Item>
<Nav.Item><Nav.Link href="https://example.com/project-se/#/Contact">CONTACT</Nav.Link></Nav.Item>
</Nav>
</Navbar.Collapse>
</Navbar>
</Styles>
);
}
如果你使用的是React Router
,那么BrowserRouter
暂时不能工作。 您可以改用 HashRouter。
// import { BrowserRouter as Router } from 'react-router-dom';
import { HashRouter as Router } from 'react-router-dom'
如果你想使用 BrowserRouter 然后添加这个basename={process.env.PUBLIC_URL
到Router
GitHub 页面不支持客户端路由,但您可以使用 HashRouter 代替 BrowserRouter
从'react-router-dom'导入{HashRouter作为路由器};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.