我有一个将被整个应用程序使用的确认对话框,它在最高层级组件中声明。它连接到 redux,因此每次组件想要打开此模式时,它都会使用要显示的消息和要在确认时再次调度的操作来更新 redux 状态。它可以工作,但动作并不总是普通的对象,有时它是一个处理异步操作的函数。我读到不建议将函数存储在 redux 状态,那我该怎么做呢?
在我的组件下面找到
const ConfirmDialog =
({ isOpen, message, action, dispatchAction, setOpen }) => {
const close = () => {
setOpen(false);
}
const confirm = () => {
dispatchAction(action);
close();
}
return (
<div>
<Dialog
open={isOpen}
aria-labelledby="alert-dialog-title"
aria-describedby="alert-dialog-description"
>
<DialogTitle id="alert-dialog-title">
{"Are you sure?"}
</DialogTitle>
<DialogContent>
<DialogContentText id="alert-dialog-description">
{message}
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={confirm} color="primary">
confirm
</Button>
<Button onClick={close} color="primary"autoFocus>
cancel
</Button>
</DialogActions>
</Dialog>
</div>
);
}
const mapStateToProps = state => ({
isOpen: Selector.isOpen(state),
message: Selector.getMessage(state),
action: Selector.getAction(state)
});
const mapDispatchToProps = dispatch => {
return {
setOpen: open => dispatch(Action.setOpen(open)),
dispatchAction: action => dispatch(action)
};
};
export default connect(mapStateToProps, mapDispatchToProps)(ConfirmDialog);
提前致谢