如何使用 preact-router 以编程方式导航?

Posted

技术标签:

【中文标题】如何使用 preact-router 以编程方式导航?【英文标题】:How to programmatically navigate with preact-router? 【发布时间】:2017-07-31 01:21:30 【问题描述】:

我正在尝试弄清楚如何使用 typescript、preact 和 preact-router 来构建 Web 应用程序的前端部分。我已经走了很长一段路,但我仍然需要弄清楚如何使用 preact-router 以编程方式导航(重定向)。我可以做history.replaceState(null, null, '/#/redirectedUrl');,但是虽然这会更改地址栏中的 URL,但 preact-router 不会路由到新的 URL。

使用 preact-router 时以编程方式导航的首选方式是什么?

【问题讨论】:

【参考方案1】:

'preact-router' 导入函数route 是要走的路:

import  route  from 'preact-router';
route('/url/to/rout/to');

【讨论】:

实际上你也非常接近原来的方法,只是 replaceState() 修改当前历史条目而不是添加新条目,所以 preact-router 看不到它(修改不会触发事件)。你可以这样做:history.pushState(null, null, '/#/redirectedUrl') @JasonMiller 实际上,即使使用history.pushState(null, null, '/#/url');,我也无法让 preact-router 路由。这可能是时间问题/我从哪里拨打电话?我目前正在我的组件的render()-method 中进行此调用。 现在我意识到我把你引到了那里——pushState() 也不会触发任何事件,所以路由器也不会响应。您使用的location.hash 分配可能是最好的,或者如果您想保持抽象,您可以从preact-router 导入route 函数并调用route('/url') 是的,这将很好地抽象出我正在使用的历史记录。我会更新我的答案。【参考方案2】:

您可以根据需要通过两种方式进行操作

import  route  from 'preact-router';
route('url');

这将在历史记录中创建一个pushState(即)它将为此网址创建一个新条目

import  route  from 'preact-router';
route('url', true);

这将在历史记录中创建一个 replaceState(即),这会将历史记录中的当前页面 url 条目替换为您将路由到的 url。您可以在以下情况下使用此功能:当从登录屏幕路由到您的主/仪表板屏幕时,在单击浏览器后退按钮时,您不希望用户在用户登录后返回登录屏幕(从而用您的仪表板条目替换登录条目)。

【讨论】:

以上是关于如何使用 preact-router 以编程方式导航?的主要内容,如果未能解决你的问题,请参考以下文章

[PReact] Handle Simple Routing with preact-router

如何使用processon制作思维导图

如何以编程方式使用自动布局以编程方式添加 UIview?

如何以编程方式添加标签并以编程方式使用自动布局定位它

思维导图有哪些元素?如何在线绘制思维导图?

读书的思维导图怎么做?