React:使用 react-router-component 导航时如何提示未保存的更改

Posted

技术标签:

【中文标题】React:使用 react-router-component 导航时如何提示未保存的更改【英文标题】:React: How to prompt for unsaved changes when navigating with react-router-component 【发布时间】:2016-11-24 21:51:57 【问题描述】:

Redux 状态保存未保存更改的标志,如果设置了此标志,我想在导航(单击链接)时提示用户。我正在使用react-router-component。我没有在文档中找到如何做到这一点。

【问题讨论】:

【参考方案1】:

任何在 2018 年看到这篇文章并使用 react 路由器 4+ 的人,我建议阅读这个reacttraining example

TL;DR 在顶部使用Prompt 组件

<Prompt
    when=hasUnsavedChanges
    message="There are unsaved changes, do you wish to discard them?"
/>

【讨论】:

您能否解释一下这实际上是如何工作的,或者在您的答案中包含更完整的代码示例?【参考方案2】:

您应该能够简单地创建自己的 Link 组件(继承自 Router.NavigatableMixin,例如此处为 https://github.com/STRML/react-router-component/issues/105#issuecomment-63874805 和此处为 http://strml.viewdocs.io/react-router-component/recipes/custom-link/)。

然后,您只需处理该组件上的点击事件,提示用户是否要导航,如果“是”,您只需继续使用 this.navigate(...)(从您的组件内部,继承自 Navigatable)。

【讨论】:

它可以正常工作,但是鼠标指针悬停状态消失了。除了编写自定义点击处理程序之外,我如何保留 Link 的原始行为? 悬停状态可能是只有 css 的东西 - 检查链接组件的样式并与你的比较。 这看起来是一个非常糟糕的解决方案,因为您可能有很多方法可以在不点击链接的情况下离开。例如。在浏览器中点击“返回”。

以上是关于React:使用 react-router-component 导航时如何提示未保存的更改的主要内容,如果未能解决你的问题,请参考以下文章

在React 中使用 react-i18next 国际化

“使用 JSX 时,React 必须在范围内”(react/react-in-jsx-scope 与 index.js 上的“window.React = React”)

使用react搭建组件库:react+typescript

是否可以在 React 中使用 React.useState(() => )?

React的使用

使用通过 react、redux 和 react-redux 完成的组件以及在 react 应用程序中使用 webpack 构建时出错