索引
import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom'
import App from './App';
import './styles/index.css';
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>
);
import { Routes, Route } from "react-router-dom";
import Navbar from "./components/Navbar";
import About from "./routes/About";
import Contact from "./routes/Contact";
import Home from "./routes/Home";
import Project from "./routes/Project";
const App = () => {
return (
<>
<Navbar />
<Routes>
<Route path="/" element={<Home />}></Route>
<Route path="/about" element={<About />}></Route>
<Route path="/project" element={<Project />}></Route>
<Route path="/contact" element={<Contact />}></Route>
</Routes>
</>
);
};
export default App;
"homepage"
示例:
"homepage": "https://github.com/amodhakal/portfolio",
切换到
HashRouter
BrowserRouter
使用的技术。
索引import React from 'react';
import ReactDOM from 'react-dom/client';
import { HashRouter } from 'react-router-dom';
import App from './App';
import './styles/index.css';
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<HashRouter>
<App />
</HashRouter>
</React.StrictMode>
);
[email protected]+
数据路由器
import React from 'react';
import ReactDOM from 'react-dom/client';
import {
createHashRouter,
RouterProvider
} from 'react-router-dom';
import App from './App';
import './styles/index.css';
const router = createHashRouter([
{
path: "/*",
element: <App />,
}
]);
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<RouterProvider router={router} />
</React.StrictMode>
);
有关更多详细信息,请参阅
create-react-app
和
有关客户端路由的注释。 当我使用
gh-pages
我的问题:路由在我的本地系统上工作正常,但是当我使用
gh-pages
部署我的网络应用程序时,我无法直接转到子页面。
示例:
ayushjaink8.github.io/cfhelper
正在工作,我可以从网络应用程序内转到其他页面。但是当我在 URL 中输入 ayushjaink8.github.io/cfhelper/dashboard
时,它会显示 github 404 错误页面。
<HashRouter/>
并在package.json中添加主页标签(如homepage: "/<repository-name>/#"
)解决了上述问题。
gh-pages
在其 URL 路由中也遵循 #
规则。所以如果你写
ayushjaink8.github.io/cfhelper/#/<any-route-of-your-app>
,它不会显示任何404错误页面。我的代码库中的其他所有内容都保持不变。我没有使用
useHistory()
、<BrowserRouter />
或任何其他功能。大多数情况下仅使用
<HashRouter/>
即可。您的主页变为 /<repo-name>/#
而不是 /<repo-name>
。这是当您使用
<HashRouter/>
时唯一会改变的事情。例如之前的主页是:
https://ayushjaink8.github.io/cfhelper/
使用 <HashRouter/>
,URL 现在变为:
https://ayushjaink8.github.io/cfhelper/#
这也适用于路线。这是我的示例代码:
import { Routes, Route, HashRouter } from "react-router-dom";
<HashRouter>
<Navbar />
<Routes>
<Route path="/" element={<Home />} />
<Route path="/auth/login" element={<Login />} />
<Route path="/auth/signup" element={<Signup />} />
<Route path="/dashboard" element={<Dashboard />} />
<Route path="/contests/create" element={<CreateContest />} />
<Route exact path="/contests/join" element={<JoinContest />} />
<Route path="/contests/live" element={<LiveContest />} />
<Route path="/practice" element={ <Practice /> } />
<Route path="/analyze" element={ <Analyze /> } />
<Route path="/verify" element={<VerifyEmail />} />
<Route path="/profile/edit" element={<EditProfile />} />
</Routes>
<Footer />
</HashRouter>
{
"name": "cfhelper",
"homepage": "/<your-github-repo-name>/#",
"version": "1.0.0",
"private": true,
}
我的2美分。
homepage
package.json
"homepage": "https://volodalexey.github.io/test_swapi_ant",
src/routes/router.tsx
:import React from 'react'
import {
createHashRouter,
createBrowserRouter,
createRoutesFromElements,
Route
} from 'react-router-dom'
import { HomeLayout } from '../layouts/HomeLayout'
const routes = createRoutesFromElements(
<Route>
<Route index element={<HomeLayout />}
</Route>
)
export const router = process.env.HASH_ROUTER === 'true' ? createHashRouter(routes) : createBrowserRouter(routes)
src/App.tsx
:
import React, { type ReactElement } from 'react'
import { RouterProvider } from 'react-router-dom'
import { router } from './routes/router'
function App (): ReactElement {
return (
<RouterProvider router={router} />
)
}
export default App
HASH_ROUTER
值。例如。 webpack.config.js
const { DefinePlugin } = require('webpack')
module.exports = {
...
plugins: [
new DefinePlugin({
'process.env.HASH_ROUTER': JSON.stringify(process.env.HASH_ROUTER || 'false')
})
]
...
}
package.json
: "scripts": {
"build": "webpack",
"build-github": "HASH_ROUTER=true webpack",
"serve": "webpack serve"
},
npm run build-github
并推送到 gh-pages
dist
文件夹)git subtree push --prefix dist origin gh-pages
。
请参阅我的存储库中的示例https://github.com/volodalexey/test_swapi_ant
而不是
<a href="/endpoint"></a>
这是 HashRouter 的示例:
<HashRouter>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/endpoint" element={<MyComponent />} />
<Route path="*" element={<NotFoundPage />} />
</Routes>
</HashRouter>
我花了这么多时间才意识到这一点。希望这会对某人有所帮助。
当我使用 gh-pages 时,我在 ReactJS 中遇到了这个问题。
路由在我的本地系统上工作正常,但是当我将网络应用程序部署到 gh-pages 时,它无法工作。
就像其他答案一样,首先:
确保 package.json 中有一个“主页”条目,用于在 GitHub Pages 上托管它。
"homepage": "https://{username}.github.io/{repository-name}/",
将 BrowserRouter 切换到 HashRouter。
import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App';
import { HashRouter } from 'react-router-dom';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<HashRouter>
<App />
</HashRouter>
</React.StrictMode>
);
我使用的是这样的锚元素:
<a href="/">Home</a>
<a href="/about">About</a>
它在我的本地主机上运行,但在我的 GitHub 页面中它给了我错误 404:找不到页面,我找到了解决此问题的两个解决方案。
第一个解决方案:将锚元素的 href 属性更改为您在 GitHub 页面中托管的位置。
例如:
<a href="https://{username}.github.io/{repository-name}/">Home</a>
<a href="https://{username}.github.io/{repository-name}/about">About</a>
这对我有用。但现在您将无法在本地主机上测试它。但是,如果您想坚持使用锚元素或链接元素,则此解决方案有效。
第二种解决方案:这是我发现效果最好的解决方案。将锚元素或链接元素更改为按钮,并添加 onClick 事件以使用 useNavigate 更改页面。
应用程序.js
import Home from './pages/Home';
import About from './pages/About';
import { Routes, Route, useNavigate } from 'react-router-dom';
function App() {
const navigate = useNavigate();
return
<>
<button onClick={() => navigate('/')}>Home</button>
<button onClick={() => navigate('/about')}>About</button>
<Routes>
<Route path="/" element={ <Home/> } />
<Route path="/about" element={ <About/> } />
</Routes>
</>
}
export default App;
希望这有帮助。
// 将基本名称添加到您的 browserRouter 组件
想通了。这是因为 url 结构。