【问题标题】:Page reloads when using href to change route in FlowRouter使用 href 更改 FlowRouter 中的路由时页面重新加载
【发布时间】:2017-04-10 05:35:12
【问题描述】:

我在 Meteor+React 应用程序中使用 FlowRouter 进行路由。我已经定义了一些这样的路线:

FlowRouter.route('/about', {
    action: () => {
        mount(MasterLayout, {
            content: <AboutPage />,
        });
    },
});


FlowRouter.route('/terms', {
    action: () => {
        mount(MasterLayout, {
            content: <TermsPage />,
        });
    },
});

现在,当我单击 &lt;a href="/about"&gt;About&lt;/&gt; 之类的链接时,它会重新加载整个页面,而不仅仅是更改内容。

另外,如果我使用FlowRouter.go('/about'),它可以正常工作并且不会重新加载页面,只会更改内容。

请告诉我这里发生了什么。

【问题讨论】:

    标签: reactjs meteor iron-router flow-router


    【解决方案1】:

    发生这种情况的原因可能不止一个,但这是我的想法:

    这是因为您的&lt;a&gt; 标记可能位于具有click 事件处理程序的元素(父母或祖父母或祖父母...)内,并且该处理程序调用.stopPropagation()。这会导致事件停止冒泡文档点击事件处理程序,由 FlowRouter 添加,它负责为您更改路线。因此,正常行为,当点击浏览器的&lt;a&gt; 标签时,会执行更改路由并重新加载页面的行为。

    要解决此问题,您可以尝试删除 .stopPropagation()。如果由于某些原因不能,您可以自己致电e.preventDefault()FlowRouter.go

    如果您对它的工作原理感兴趣,这里有更多信息可以深入了解:

    【讨论】:

    • 感谢您的详细解释。如何检查&lt;a&gt; 标签是否在调用.stopPropagation() 的容器内?另外,我正在考虑自己做e.preventDefault()FlowRouter.go(),但我必须在每个地方替换&lt;a&gt; 标签。如果我让&lt;a&gt; 标签自己工作会更好。
    • 你在使用 React 对吗?然后你可以编写一个组件来包装普通的&lt;a&gt;标签,这个组件将捕获&lt;a&gt;标签上的点击事件并完成导航工作。
    • 找到了!! twbs:bootstrap 包正在调用 .stopPropagation()。删除它就可以了。将永久删除它,因为我什至不使用引导程序那么多。非常感谢@Khang
    • 我的错。在注释掉引导程序包中的.stopPropagation() 调用后,它仍然无法正常工作。 @Khang
    • IMO,最好的选择是编写一个包装&lt;a&gt;标签的组件并进行导航
    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 2016-04-12
    • 2019-11-19
    • 2015-03-29
    • 2017-05-14
    • 1970-01-01
    相关资源
    最近更新 更多