我有一个表单,用户可以在其中编辑内容。如果用户有一些未保存的更改并想离开页面,我想给他一个自定义对话框,询问他是否确定。如果然后导航应该继续并且表单更改标志应该被重置,否则用户应该停留在页面上。
在这里您可以检查我当前正在检查此条件的高阶组件。它正在工作,但该函数leave
返回一个字符串,然后 react-router 将在本机警报中显示该文本。
有没有办法在这里显示我的自定义对话框?并且我还可以获得回调或类似的警报,以便我可以调度一个事件,该事件告诉存储,最新的更改并不重要。
import React, {Component, PropTypes} from "react";
import connectRouter from "./connectRouter";
import { connect } from "react-redux";
import {injectIntl, intlShape} from "react-intl";
export default function confirmLeave(RouteTargetComponent) {
@injectIntl
@connectRouter
@connect((state, routing) => {
return {
studies: state.studies
};
})
class ConfirmLeaveHOC extends Component { // HOC = Higher Order Component
static propTypes = {
router: PropTypes.object.isRequired,
route: PropTypes.object.isRequired,
dispatch: PropTypes.func.isRequired,
intl: intlShape.isRequired,
studies: PropTypes.object.isRequired,
};
leave = () => {
if (this.props.studies.isChanged) {
// lets stop the navigation
return this.props.intl.formatMessage({ id: "confirmLeave" });
}
// continue the navigation
return true;
}
componentDidMount() {
this.props.router.setRouteLeaveHook(this.props.route, this.leave.bind(this));
}
render() {
// render the component that requires auth (passed to this wrapper)
return (<RouteTargetComponent {...this.props}/>);
}
}
return ConfirmLeaveHOC;
}