我有一个react组件,它具有以下功能
const handleNavigate = (clientId) => {
console.log(clientId)
navigate(`/dashboard/clients/${clientId}`)
}
console.log()显示了我想附加的ID,以便在导航函数中使用。
以及
浏览器中的URL正在更新。
但页面不会更改。
这适用于从/dashboard/clients
导航到/dashboard/clients/foo
但从/dashboard/clients/foo
导航到/dashboard/clients/bar
时不起作用
clientId被传递到卡中,如下所示...
const CompanyCard = (props) => {
const { client, showWatchlist, removeDisabled, showRemove, removeType } = props
...
}
然后在卡中
<CardActionArea
onClick={() => handleNavigate(client._id)}
...
有什么想法吗?
谢谢
更新
在阅读了@redapollos的建议后,我尝试了Outlet
和
useRoutes方法...都不起作用。
import { useRoutes } from 'react-router-dom'
// then in the routes...
{ path: 'clientdetail/:id', element: <ClientDetail /> },
{ path: 'clientdetail/', element: <ClientDetail /> },
这可能是由于使用了useRoutes
钩子,但我仍在努力。
关于SO的另一个问题可能会很快得到答案-https://stackoverflow.com/a/70009104/13078911
9条答案
按热度按时间soat7uwm1#
我刚在React Router Dom Docs v6中读到这个解决方案:
因此,基本上我在路由和
replace: true
之前添加了../
。这对我有用,希望对你有用
r6l8ljro2#
可行的解决方案!
替换url后,手动调用
navigate(0)
将自动刷新页面!这在从
/same_path/foo
导航到/same_path/bar
的情况下有效。请注意意外的页面引用刷新行为:
在正常情况下,比如从
/home
导航到/same_path/bar
,navigate(0)
会导致页面刷新,即使页面已经完成渲染。为了防止这种情况,你可以看看this question。更多信息:
ntjbwcob3#
尝试替换URL而不是添加新URL。当您从
/dashboard/clients
转到/dashboard/clients/foo
时,您将从父级转到子级,您的URL包含所有内容以及/foo
。但是,当您从/dashboard/clients/foo
转到/dashboard/clients/bar
时,您正在导航到可能导致问题的同级/foo
到/bar
。尝试到replace这值象navigate(/dashboard/clients/ba, {replace: true})
这里是范例到如何到使用这一般.使用它为更多信息. https://www.digitalocean.com/community/tutorials/react-react-router-v67uzetpgm4#
我遇到了同样的问题,我的代码很好,但是,我在这篇文章中发现v6不支持可选参数。
https://github.com/remix-run/react-router/issues/7285
我有:
不得不将其更改为:
我希望他们在未来支持它,但截至v6.0.2,他们不支持。
f0brbegy5#
也许可以尝试组件导航:
lmvvr0a86#
这可能有点晚了,但我遇到了同样的问题,你只需要为你的组件触发一个re-render,你可以通过在你的组件中添加一个useEffect钩子来实现,你已经为
/dashboard/clients/:clientId
分配了一个依赖于你想要更新的参数的钩子。它应该看起来像这样:
您的页面现在应该会更新为新的参数
23c0lvtd7#
我认为这是一个更好的解决办法。
确保您的应用程序从
react-router-dom
打包到BrowserRouter
中7d7tgy0s8#
尝试将窗口位置作为关键 prop 添加到路径中的元素
即
b0zn9rqh9#
基于此链接https://github.com/remix-run/react-router/issues/8245我可以解决这个问题。
我猜由于没有任何更改,屏幕没有更新。我一在目标路线组件上添加UseEffect,并将lastelement作为参数传递,它就工作了。
换句话说:在目标组件上添加:React使用效果(....)[最后一个元素]。