如何在 react-router v4 中的后退按钮上显示模态框?

IT技术 javascript reactjs react-router
2021-05-20 22:57:13

如果用户在浏览器中单击后退按钮,如何显示自定义模式框。我已经有一个用于字段更改的模式框,我不想使用 Prompt 的window.confirm.

2个回答
  1. 我的项目中有一个单独的组件用于模态框,称为“ Confirm ”,我在其他组件中使用它,我们将其称为“ Sample ”。
  2. 在我的Sample组件中,我维护了一个状态来管理该确认框的显示在此处输入图片说明
  3. 为了检测浏览器/设备后退按钮,我在useEffect函数中添加了一个事件,如下所示。

在此处输入图片说明

这是我的 goBackButtonHandler 函数。

在此处输入图片说明

此函数检查是否有任何表单输入字段是脏的。如果是,我会显示“确认”框,或者我只是返回上一页。我认为您可以对您的代码使用类似的逻辑。

在我的应用程序中,我有返回和取消按钮,因此对于应用程序内导航和浏览器/设备导航,我只需让 React History API 调用

history.goBack();

在此处输入图片说明

这会触发事件,如果我的字段很脏,我可以看到模态框。而已!希望这会有所帮助。

假设您有一些页面,并且所有页面都包含在 Container 组件中,请尝试以下操作:

class Container extends Component {

state = {
 showModal: false
}

handleBackClick(){
 this.props.history.push(this.props.location.pathname)
 this.setState({showModal: true})
}

componentDidMount(){
 window.onpopstate = this.handleBackClick.bind(this)
}

render(){
 return(
  <YourModal isOpen={this.state.showModal} ... />
 )
}

}

export default withRouter(Container)

您必须使用 withRouter 函数包装 Container 才能访问路由props。