【发布时间】:2017-01-01 10:45:53
【问题描述】:
我正在尝试创建一个服务,该服务将显示一个确认对话框并捕获用户的操作(确认/取消),并且可以在任何组件中重复使用,并且尝试次数更少。
到目前为止我尝试了什么(使用React gateway 注入我的对话框)
我创建了一个类似的服务:
var createConfirm = function(options, onConfirm, onCancel) {
options = options || {};
var actions = [
<FlatButton
label="Cancel"
primary={true}
onClick={onCancel}
/>,
<RaisedButton
label="OK"
primary={true}
onClick={onConfirm}
/>,
];
return (
<Gateway into="confirm-modal">
<Dialog
title={options.title || 'Confirmation'}
actions={actions}
modal={true}
open={true}
>
{options.content || 'Are you sure?'}
</Dialog>
</Gateway>
)
}
export default createConfirm;
然后在我的组件中,我将其注入render() 函数:
...
{
_this.state.isOpen && _this.confirmable
}
每当我需要显示确认模式时,我都会打电话
this.confirmable = createConfirm({
title: 'CONFIRM',
content: 'Are you sure to do that'
}, function() {
console.log('user confirm')
_this.setState({
isOpen: false
});
}, function() {
console.log('user cancel')
_this.setState({
isOpen: false
})
});
this.setState({isOpen: true});
我的问题
如您所见,我关闭该确认对话框的操作将isOpen 状态设置为false,因此不会呈现。这有点作弊,似乎不是关闭对话框的原生方式(失去离开动画,看起来很奇怪......)。
那么我该如何实现一个我可以完全控制对话框的服务呢?
谢谢!
【问题讨论】:
标签: javascript reactjs modal-dialog