Javascript 如何在react路由器v4中显示返回按钮上的模式框?

Javascript 如何在react路由器v4中显示返回按钮上的模式框?,javascript,reactjs,react-router,Javascript,Reactjs,React Router,如何在用户单击浏览器中的“后退”按钮时显示自定义模式框。 我已经有一个用于字段更改的模式框,我不想使用提示符的窗口。确认假设您有一些页面,并且所有页面都包装在容器组件中,请尝试以下操作: class Container extends Component { state = { showModal: false } handleBackClick(){ this.props.history.push(this.props.location.pathname) this.setState

如何在用户单击浏览器中的“后退”按钮时显示自定义模式框。
我已经有一个用于字段更改的模式框,我不想使用提示符的
窗口。确认

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

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)
类容器扩展组件{
状态={
showModal:错误
}
把手点击(){
this.props.history.push(this.props.location.pathname)
this.setState({showmodel:true})
}
componentDidMount(){
window.onpopstate=this.handleBackClick.bind(this)
}
render(){
返回(
)
}
}
使用路由器导出默认值(容器)

您必须使用withRouter功能包装容器才能访问路由道具。

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

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)
类容器扩展组件{
状态={
showModal:错误
}
把手点击(){
this.props.history.push(this.props.location.pathname)
this.setState({showmodel:true})
}
componentDidMount(){
window.onpopstate=this.handleBackClick.bind(this)
}
render(){
返回(
)
}
}
使用路由器导出默认值(容器)
您必须使用withRouter功能包装容器才能访问路由道具

  • 我的项目中有一个单独的组件,用于模式框,名为“确认”,我在其他组件中使用它,我们称之为“示例”
  • 在我的示例组件中,我维护一个状态,用于管理该确认框的显示。
  • 为了检测浏览器/设备后退按钮,我在我的useffect功能中添加了一个事件,如下所示
  • 这是我的goBackButtonHandler函数

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

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

    history.goBack();
    

    这会触发事件,如果我的字段不干净,我可以看到模式框。就这样!希望这会有所帮助

  • 我的项目中有一个单独的组件,用于模式框,名为“确认”,我在其他组件中使用它,我们称之为“示例”
  • 在我的示例组件中,我维护一个状态,用于管理该确认框的显示。
  • 为了检测浏览器/设备后退按钮,我在我的useffect功能中添加了一个事件,如下所示
  • 这是我的goBackButtonHandler函数

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

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

    history.goBack();
    


    这会触发事件,如果我的字段不干净,我可以看到模式框。就这样!希望这会有所帮助。

    是否显示一些代码?我们看不懂你的心思…检查一下这个显示一些代码?我们无法读懂您的想法…请检查此handleBackClick正在侦听事件,但preventDefault不起作用。抱歉,您可以安全地删除preventDefault。和绑定HandleBack单击(已编辑),但页面将导航。我想阻止导航,直到用户在模态框中确认获得它,然后您必须修改handleBackClick功能。您无法阻止使用浏览器的“后退”按钮导航,而是必须在handleBackButton函数中处理重定向,并将用户再次带到给定页面并显示模式。handleBackClick正在侦听事件,但preventDefault不起作用。很抱歉,您可以安全地删除preventDefault。和绑定HandleBack单击(已编辑),但页面将导航。我想阻止导航,直到用户在模态框中确认获得它,然后您必须修改handleBackClick功能。您无法阻止使用浏览器的“后退”按钮导航,而是必须在handleBackButton功能中处理重定向,并将用户再次带到给定页面并显示模式。