bounty将在5天后过期。此问题的答案可获得+250声望奖励。Page not found正在寻找规范答案。
假设我的URL如下所示:
/blog/[post_id]/something
将$post_id
向下传递到树中任何位置的任何组件的推荐方法是什么?
我知道如何使用getInitialProps检索路由参数,但是向下传递这些值总是让我感到困难。
对于pages,从技术上讲,我可以使用React Contexts,尽管对于这样一个微不足道的用例来说,这似乎有点过大。
对于layouts,老实说我完全迷失了方向,因为页面是布局的子级,getInitialProps的返回值传递给页面而不是布局。
我的组件可以使用useRouter,但这需要useEffect
,而且还会使我的组件依赖于路由本身...
欢迎提出任何建议(:
2条答案
按热度按时间xxhby3vn1#
我的组件可以使用
useRouter
,但这需要useEffect
,而且还会使我的组件依赖于路由本身...useRouter
似乎是显而易见的解决方案。我不完全理解您对组件依赖于路由的担忧。我猜它确实使Layout
不太灵活,因为它需要知道post id存储在post_id
查询变量中。但无论如何我都会这样做:)它为您提供了一种很好且简单的方式来访问查询变量,这些变量可以在BlogPost
之外的Layout
中使用,也可以在BlogPost
内部使用的深度嵌套组件中使用。使用每页布局方法:
/components/Layout
/pages/blog/[post_id].jsx
/pages/_app.tsx
(支持每页布局,从文档复制)a14dhokn2#
我认为最简单和最干净的方法是使用
window.location.pathname
。这会给予你域名后面的部分。例如你将得到
/blog/[post_id]/something
你可以在
useEffect
中运行上面的代码并设置一个状态。或者你可以写一个钩子并在dynamicId组件下的组件中使用它