我正在研究ReactJS项目。我在这里遇到react-router-dom
的问题。经过几次导航后,我的屏幕变白了。
以下是我的Router.js文件:
// Routes.js
import React from 'react';
import { Switch, Route } from 'react-router-dom';
import Category from "./Category";
import ProductDetails from "./ProductDetails";
import Contact from "./Contact";
import Login from "./Login";
import Register from "./Register";
import Checkout from "./Checkout";
import Cart from "./Cart";
import Confirm from "./Confirm";
import Home from "./Home";
import UserDashboard from './UserDashboard';
const Routes = () => {
return (
<>
<Route path="/" exact component={Category} />
<Route path="/dash" exact component={UserDashboard} />
<Route path="/home" exact component={Home} />
<Route path="/product" exact component={ProductDetails} />
<Route path="/cart" exact component={Cart} />
<Route path="/checkout" exact component={Checkout}/>
<Route path="/confirm" exact component={Confirm}/>
<Route path="/login" exact component={Login} />
<Route path="/register" exact component={Register} />
<Route path="/contact" exact component={Contact} />
</>
)
}
export default Routes
以下是我的App.js文件:
// App.js
import React, { useEffect } from "react";
import "./App.css";
import { BrowserRouter as Router} from "react-router-dom";
import Routes from "./pages/Routes";
const App = () => {
return (
<Router>
<Routes />
</Router>
);
};
export default App;
类别部分的可疑代码:
// Category.js
import React, { useState, useEffect } from "react";
import Header from "../components/Header";
import BannerText from "../components/BannerText";
import Footer from "../components/Footer";
import Axios from "axios";
import ProductCard from "../components/ProductCard";
import { Link } from "react-router-dom";
const Category = () => {
const [next, setNext] = useState("");
const [prev, setPrev] = useState("");
const [pagdata, setPagdata] = useState([]);
const [purl, setPurl] = useState([]);
const [xurl, setXurl] = useState("http://192.168.43.34:8000/api/products/");
const [imgurl, setImgurl] = useState([]);
const [caturl, setCaturl] = useState(
"http://192.168.43.34:8000/api/categories/"
);
const [category, setCategory] = useState([]);
const [catsurl, setCatsurl] = useState([]);
// Products
useEffect(() => {
Axios.get(xurl).then((response) => {
console.log(response.data.previous + "from category");
return [
setPrev(response.data.previous),
setNext(response.data.next),
setPagdata(response.data.results),
setPurl(response.data.results.url),
];
});
// Browse Categories List
Axios.get(caturl).then((response) => {
console.log(response.data.results.children);
return [setCategory(response.data.results), console.log(category)];
});
// Sub Categories List
Axios.get(caturl).then((response) => {
console.log(response.data.results);
return [setCategory(response.data.results), console.log(category)];
});
}, [xurl]);
return (
<div>
<Header />
<BannerText title="Product List" />
<div className="container">
<div className="row">
<div className="col-xl-3 col-lg-4 col-md-5">
<div className="sidebar-categories">
<div className="head">Browse Categories</div>
<ul className="main-categories">
{category.map((category) => {
return (
<Link to={""}>
<li className="main-nav-list">
<a
data-toggle="collapse"
href="#fruitsVegetable"
aria-expanded="false"
aria-controls="fruitsVegetable"
>
<span className="lnr lnr-arrow-right"></span>
{category.breadcrumbs}
<span className="number">(53)</span>
</a>
</li>
</Link>
);
})}
</ul>
</div>
</div>
<div className="col-xl-9 col-lg-8 col-md-7">
{/* Start Filter Bar */}
<div className="filter-bar d-flex flex-wrap align-items-center">
<div className="sorting"></div>
<div className="sorting mr-auto">
<div className="head has-text-white">Browse Categories</div>
{/* <select>
<option value="1">Show 12</option>
<option value="1">Show 12</option>
<option value="1">Show 12</option>
</select> */}
</div>
<div className="pagination">
<a
href="#/"
className="prev-arrow"
onClick={() => setXurl(prev)}
>
<i className="fa fa-long-arrow-left" aria-hidden="true"></i>
</a>
{/* <a href="#/" className="prev-arrow" onClick={()=>{onClickLeft();}}><i className="fa fa-long-arrow-left" aria-hidden="true"></i></a> */}
<a href="#/"></a>
<a href="#/"></a>
<a href="#/"></a>
<a href="#/"></a>
{/* <a href="#/" className="next-arrow" onClick={()=>setXurl(next)}><i className="fa fa-long-arrow-right" aria-hidden="true"></i></a> */}
<a
href="#/"
className="next-arrow"
onClick={() => setXurl(next)}
>
<i className="fa fa-long-arrow-right" aria-hidden="true"></i>
</a>
</div>
</div>
{/* End Filter Bar */}
{/* Start Best Seller */}
{/* End Best Seller */}
<section className="lattest-product-area pb-40 category-list">
<div className="row">
{pagdata.map((pagdata) => {
return (
<ProductCard
title={pagdata.title}
realurl={purl}
imageurl={pagdata.url}
/>
);
})}
</div>
</section>
{/* Start Filter Bar */}
<div className="filter-bar d-flex flex-wrap align-items-center">
<div className="sorting mr-auto"></div>
<div className="pagination">
<a href="#/" className="prev-arrow">
<i className="fa fa-long-arrow-left" aria-hidden="true"></i>
</a>
<a href="#/"></a>
<a href="#/"></a>
<a href="#/"></a>
<a href="#/"></a>
<a href="#/" className="next-arrow">
<i className="fa fa-long-arrow-right" aria-hidden="true"></i>
</a>
</div>
</div>
{/* End Filter Bar */}
</div>
</div>
</div>
{/* <DealOf /> */}
<Footer />
</div>
);
};
export default Category;
当我尝试从“ /”导航到任何其他路线时,只会出现白屏。它有一些“精确”的方法。请让我知道为什么这种确切的方法会引起问题
答案 0 :(得分:0)
要在ReactJS SPA(单页应用程序)上进行路由,您应该使用Link
的{{1}}组件,但是在代码中,我只是看到您使用锚点react-router-dom
标签。仅存在一个<a>
标签,其<Link>
属性是一个空字符串!注意代码的这一部分:
to
实际上,您应该在此处传递以下路线名称之一,如以下代码所示:
{category.map((category) => {
return (
<Link to={""}> // <== here!!!
此外,在ReactJs上要可爱,不需要在JSX上返回,像这样编写上面的代码:
{category.map((category) => {
return (
<Link to="/dash"> // <== here!!!
其他 {category.map((category) => ( // <== return JSX like it
<Link to="/dash">
标签只是导致您的应用刷新,因此带有内部路由并带有锚标签的应用仍不是SPA。使用<a href="#/"
中的Link
。
此外,您应用程序中的react-router-dom
组件位于Link
函数下。因此您的map
中可能包含相关的路线名称。另外,我建议您不要对category
函数中的array.map
及其项使用相同的名称,如下所示:
map
希望这些建议对您有所帮助。