【发布时间】:2021-06-30 23:20:00
【问题描述】:
所以我有一个 NavBar 组件,如果我从“/sites/1”到“/categories/1”或从“/sites”到“/categories”甚至“/sites”的任何内容,创建的链接都可以正常工作/1" 到 "/sites" 但是当我在一个类别显示页面上时不起作用/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
【问题讨论】:
标签: reactjs react-router react-link