J'ai un menu Material ui de la manière suivante:
<MenuItem onClick={handleClose} component={<Link href={'#'}>Log Out</Link>}></MenuItem>
et que vous souhaitez utiliser les balises next.js Link
avec le MenuItem
. Quelle est la meilleure façon de procéder?
J'ai essayé les choses suivantes:
Ce qui suit ne rend pas la balise <a>
, mais ajoute href à la <li>
.
<Link href={'#'} passHref><MenuItem onClick={handleClose}>Log Out</MenuItem></Link>
Je pourrais ajouter un accessoire à MenuItem pour rendre <a>
au lieu de la <li>
, cependant, puisque le menu est imbriqué sous la <ul>
, je ne suis pas sûr d'avoir <ul><a>Log Out</a></ul>
est une bonne idée
Ce qui suit génère une erreur
<Menu id="simple-menu" anchorEl={anchorEl} keepMounted open={!!anchorEl} onClose={handleClose}> <MenuItem onClick={handleClose}>Profile</MenuItem> <MenuItem onClick={handleClose}>Log Out</MenuItem> </Menu>
Erreur: le type d'élément n'est pas valide: attendait une chaîne (pour les composants intégrés) ou une classe / fonction (pour les composants composites) mais obtenu: objet.
5 Réponses :
Vous pouvez mettre le composant "Link" dans le composant "MenuItem".
<MenuItem><Link href="#">Log Out</Link></MenuItem>
Cela semble fonctionner, mais j'obtiens le lien bleu régulier avec soulignement dans le menu. Je pense que cela remplace les styles? savez-vous si je peux conserver le style du menuitem?
@Arximede, vous pouvez changer les styles ou changer l'élément rendu par le composant "Link".
Ajouter une balise à l'intérieur du lien
<MenuItem onClick={handleClose} component={<Link href={'#'}><a>Log Out</a></Link>}></MenuItem>
J'obtiens une erreur: Erreur: le type d'élément n'est pas valide: attendait une chaîne (pour les composants intégrés) ou une classe / fonction (pour les composants composites) mais obtenu: objet.
Voir si le code ci-dessous corrige ce problème, Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object
:
const ALink = ({ url, linkText }) => <Link href={url}> <a>{ linkText }</a> </Link> <MenuItem onClick={handleClose} component={ ALink({url: '#', linkText: 'Log Out') }></MenuItem>
Comme mentionné dans l'autre réponse, donner la balise Link
dans la balise MenuItem
fonctionnera comme requis et pour les problèmes de style, vous devez donner un textDecoration: 'none'
et color: '#000'
dans la balise Link
pour éviter le soulignement et le bleu couleur du texte du Link
.
<MenuItem> <Link style={{ textDecoration: 'none', color: '#000' }} href="#" > Log Out </Link> </MenuItem>
Le composant prop à l'intérieur de <MenuItem>
est The component used for the root node. Either a string to use a HTML element or a component.
qui fait défaut à <li>
comme le dit un officiel de Material-ui.
Si vous souhaitez conserver la structure <ul><li></li></ul>
, vous devez imbriquer votre composant <Link>
intérieur du composant <MenuItem>
.
Alors c'est peut-être ce que vous vouliez.
<MenuItem onClick={handleClose}> <Link href={'#'}>Log Out</Link> </MenuItem>