【发布时间】:2016-09-08 14:39:26
【问题描述】:
我有一个表单,用户可以在其中编辑内容。如果用户有一些未保存的更改并想离开页面,我想给他一个自定义对话框,询问他是否确定。如果那么导航应该继续并且应该重置表单更改标志,否则用户应该留在页面上。
在这里你可以检查我当前正在检查这种情况的高阶组件。它正在工作,但函数 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;
}
【问题讨论】:
标签: reactjs react-native react-router