3 Réponses :
Vous pouvez utiliser react-router
de -redux pour y parvenir. goBack ()
Par exemple, votre composant bouton ressemblera à ceci:
import React, { Component } from 'react'; import { connect } from 'react-redux'; import Button from '@material-ui/core/Button'; import { goBack } from 'react-router-redux'; class BackButton extends Component { handleClick = () => { this.props.goBack(); }; render() { return <Button variant="contained" color="primary" onClick={this.handleClick}>Go Back</Button>; } } export default connect(null, { goBack, })(BackButton);
Maintenant, utilisez ce composant bouton dans vos CardActions
.
Vous pouvez obtenir de l'aide un exemple qui utilise La fonction push ()
de react-router-redux
de la même manière que dans la documentation officielle .
Le code complet est ci-dessous.
//Toolbar.js import React from 'react'; import { Toolbar, SaveButton, DeleteButton, } from 'react-admin'; import { withStyles } from '@material-ui/core'; import BackButton from './BackButton' const toolbarStyles = { toolbar: { display: 'flex', justifyContent: 'space-between', }, }; export const CustomEditToolbar = withStyles(toolbarStyles)(props => ( <Toolbar {...props}> <SaveButton/> <DeleteButton/> <BackButton/> </Toolbar> )); export const CustomCreateToolbar = withStyles(toolbarStyles)(props => ( <Toolbar {...props}> <SaveButton/> <BackButton/> </Toolbar> ));
//BackButton.js import React, { Component } from 'react'; import PropTypes from 'prop-types'; import compose from 'recompose/compose'; import { withStyles, createStyles } from '@material-ui/core/styles'; import { translate } from 'ra-core'; import Button from '@material-ui/core/Button'; import ArrowBack from '@material-ui/icons/ArrowBack'; import classnames from 'classnames'; import { fade } from '@material-ui/core/styles/colorManipulator'; const styles = theme => createStyles({ deleteButton: { color: theme.palette.error.main, '&:hover': { backgroundColor: fade(theme.palette.error.main, 0.12), // Reset on mouse devices '@media (hover: none)': { backgroundColor: 'transparent', }, }, }, }); const sanitizeRestProps = ({ basePath, className, classes, label, invalid, variant, translate, handleSubmit, handleSubmitWithRedirect, submitOnEnter, record, redirect, resource, locale, ...rest }) => rest; class BackButton extends Component { static contextTypes = { router: () => true, // replace with PropTypes.object if you use them } static propTypes = { label: PropTypes.string, refreshView: PropTypes.func.isRequired, icon: PropTypes.element, }; static defaultProps = { label: 'ra.action.back', icon: <ArrowBack />, }; render() { const { className, classes = {}, invalid, label = 'ra.action.back', pristine, redirect, saving, submitOnEnter, translate, icon, onClick, ...rest } = this.props; return ( <Button onClick={this.context.router.history.goBack} label={label} className={classnames( 'ra-back-button', classes.backButton, className )} key="button" {...sanitizeRestProps(rest)}> {icon} {label && translate(label, { _: label })} </Button> ) } } const enhance = compose( withStyles(styles), translate ); export default enhance(BackButton);
Pour aider l'interrogateur à inclure des commentaires expliquant le code que vous avez produit. Un gros bloc de code pourrait les laisser tout aussi confus.
Créez un bouton de retour. Celui-ci passera les accessoires et les enfants (texte) et utilisera directement react-router
, ce qui, à mon avis, a plus de sens et garde votre code simple.
import { Toolbar, SaveButton } from 'react-admin' import BackButton from './BackButton' const SomeToolbar = props => ( <Toolbar {...props}> <SaveButton /> <BackButton variant='outlined' color='secondary' style={{ marginLeft: '1rem' }} > Cancel </BackButton> </Toolbar> )
Exemple d'utilisation:
// BackButton.js import React from 'react' import Button from '@material-ui/core/Button' import { withRouter } from 'react-router' const BackButton = ({ history: { goBack }, children, ...props }) => ( <Button {...props} onClick={goBack}> {children} </Button> ) export default withRouter(BackButton)