Cancel componentWillUnmount if a form is incomplete

后端 未结 1 1154
你的背包
你的背包 2021-01-14 07:32

I have a form setup with redux-form and basically want to create a scenario where if there\'s content filled in any of the form\'s inputs and you try to navigate away from t

相关标签:
1条回答
  • 2021-01-14 08:12

    If you're using react-router, then you can tap into routerWillLeave; see the documentation: https://github.com/ReactTraining/react-router/blob/master/docs/guides/ConfirmingNavigation.md

    UPDATE

    It's a bit tough to provide an example, this is rough and untested.

    import { reduxForm } from 'redux-form';
    
    class Form extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          dirty: false
        };
      }
    
      componentDidMount() {
        this.props.router.setRouteLeaveHook(this.props.route, this.routerWillLeave.bind(this));
      }
    
      routerWillLeave(nextLocation) {
        const { dirty } = this.state;
    
        if (dirty) {
          return 'You have unsaved information, are you sure you want to leave this page?'
        }
      }
    
      render() {
        const { handleSubmit } = this.props;
    
        return (
          <form onSubmit={ handleSubmit(this.props.onSubmit) }>
            ...
          </form>
        );
      }
    }
    

    Basically routerWillLeave will fire anytime the user attempts to navigate. When a user makes a change, update the dirty state value to true. The documentation should cover the rest that you need to know (also make sure you're running version 2.4.0+).

    0 讨论(0)
提交回复
热议问题