所以我有一个导航栏组件,如果我从“/sites/1”到“/categories/1”或任何带有“/sites”到“/categories”甚至“/sites/1”的东西,我创建的链接工作正常到“/sites”,但当我在一个类别显示页面上时不起作用,即“/categories/1”或“/categories/3”并尝试使用路径“/categories/5”转到另一个类别显示页面例如。我认为问题与确切路径是动态的事实有关,并且路由器将两条路径视为同一件事,直到硬重新加载。下面是我的代码。有什么方法可以使用 Link 并让该组件重新渲染,还是每次都必须使用锚标记并重新加载?
import React, { useState, useEffect } from "react"
import { Switch, Route, Link, Redirect } from "react-router-dom"
import SitesIndex from "./SitesIndex";
import SiteShow from "./SiteShow";
import AddNewSiteForm from "./AddNewSiteForm"
import CategoryShow from "./CategoryShow"
const NavBar = props => {
const [categories, setCategories] = useState([])
const fetchCategories = async() =>{
try {
const response = await fetch("/api/v1/categories")
if(!response.ok){
const errorMessage = `${response.status} (${response.statusText})`
const error = new Error(errorMessage)
throw(error);
}
const categoryData = await response.json();
setCategories(categoryData.categories)
} catch (error) {
console.error(`Error in fetch: ${error.message}`)
}
}
useEffect(() =>{
fetchCategories()
},[])
const categoryLinks = categories.map(category =>{
return(
<li key={category.id} >
<Link to={`/categories/${category.id}`}>{category.name}</Link>
</li>
)
})
categoryLinks.unshift(
<li key={0}>
<Link to={`/sites`} >Home</Link>
</li>
)
return(
<div>
<div>
<ul className="nav-link">
{categoryLinks}
</ul>
</div>
<Switch>
<Route exact path="/" >
<Redirect to="/sites" />
</Route>
<Route exact path="/sites" component={SitesIndex} />
<Route exact path ="/sites/new" component={AddNewSiteForm} />
<Route exact path="/sites/:id" component={SiteShow} />
<Route exact path="/categories/:id" component={CategoryShow} />
</Switch>
</div>
)
}
export default NavBar