reactjs - URL 正在更新,但组件未显示
问题描述
我已经为此苦苦思索了大约 2 周了。我完全超出了我的深度,我觉得每次尝试都应该放弃,但我在这里,向前推进!
我在我的 App 组件中创建了一个 Route,它运行良好,看起来像这样 -
function App() {
const location = useLocation();
return (
<div className="App">
<Navigation />
<Copyright />
<Button linkTo="/hire" btnText="Hire me" />
<div className="page-wrap flex_center">
<AnimatePresence exitBeforeEnter initial={false}>
<Switch location={location} key={location.pathname}>
<Route path="/projects" exact component={Projects}/>
<Route path="/hire" exact component={Hire}/>
<Route path="/about" exact component={About}/>
<Route path="/" exact key="/" component={Home}/>
</Switch>
</AnimatePresence>
</div>
</div>
)
}
export default App;
在项目组件中,我想显示一个链接列表,然后根据一些对象数据显示内容(会有多个项目,项目的数量会定期变化)
这是项目组件 -
const Projects = () => {
const location = useLocation();
const ProjectData = [
{
id: "project-one",
name: "Project 1",
description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin molestie.",
},
{
id: "project-two",
name: "Project 2",
description: "Mauris finibus, massa eu tempor volutpat, magna dolor euismod dolor.",
},
];
const { url } = useRouteMatch();
const linkList = ProjectData.map((project) => {
return (
<li key={project.id}>
<Link to={`${url}/${project.id}`}>{project.name}</Link>
</li>
);
});
return (
<Switch location={location} key={location.pathname}>
<Route path={`${url}/:projectId`}>
<Project data={ProjectData} />
</Route>
<Route exact path={url}>
<ul>{linkList}</ul>
</Route>
</Switch>
);
};
export default Projects;
最后一部分是处理数据的项目组件
const Project = ({ data }) => {
const { projectId } = useParams();
const project = data.find(p => p.id === String(projectId));
let projectData;
let history = useHistory()
if (project) {
projectData = (
<div>
<h3>{project.name}</h3>
<p>{project.description}</p>
</div>
);
} else {
projectData = <h2> Sorry but this project doesn't exist.</h2>;
}
return (
<>
{projectData}
<button type="button" onClick={() => history.goBack()}>go back</button>
</>
);
};
export default Project;
现在我已经列出了所有内容,我遇到的问题是单击链接时 URL 会更新,但组件不会在浏览器中呈现,除非我物理刷新页面。
最初我认为我的 App 组件中的 Routes 是问题,但经过一些阅读后,我认为情况并非如此。由于对更多动态路线了解不足,我想我只是在兜圈子。
解决方案
在第 15 行,删除exact
布尔属性。
例如
// Before
<Route path="/projects" exact component={Projects}/>
// After
<Route path="/projects" component={Projects}/>
子路由的整个概念应该由子组件处理。
推荐阅读
- tcl - how to lsearch in list always match
- sql - 错误:表数据有 1 列,但提供了 3 个值 无法执行语句
- javascript - 如何使用 Google 脚本复制数据,写入“-nth”列
- android - 为什么当我向 SQLite 数据库插入值时,这些值设置为 null?
- android - React Native 的 KeyboardAvoidingView keyboardVerticalOffset 与 textinput 上的下划线重叠
- mysql - 即使包含值,MySql“列'数量'不能为空”
- javascript - 使用 jest-image-snapshot 比较图像快照时如何忽略 body 标记中的区域或元素?
- angular - 使用 *ngFor 填充跨 3 个 div 格式化的单选列表
- javafx - JavaFX:需要帮助理解 setControllerFactory
- java - Java/ Talend 根据条件分解字符串并清理数据