🔗
Next.jsとMUIのLinkコンポーネント両方をいい感じに組み合わせて使いたい
Next.jsとMUIでNext.jsの遷移機能を活かしつつMUIのデザインも取り入れたいときに、両方のLinkコンポーネントのラッパーを作ることで対処しています。
パラメータなどはさまざま考えられると思いますが、よく使う最小構成としては以下のかたちです。(わかりやすいように名前を変えてインポートしています)
import { Link as MuiLink } from '@mui/material'
import NextLink, { LinkProps } from 'next/link'
import React, { ReactNode } from 'react'
type Props = {
linkProps: LinkProps
children?: ReactNode
}
export const Link = (props: Props) => {
return (
<NextLink href={props.linkProps.href} passHref>
<MuiLink>{props.children}</MuiLink>
</NextLink>
)
}
MUIのLink
をNext.jsのLink
でラップしています。ポイントはNext側にpassHref
属性をつけることでしょうか。これがあることでhrefの参照先を内部のMUIのLinkへ渡すことができます。
また、外部リンクとして利用したい場合は以下のようにMuiLink
にtarget='_blank'
をつけてあげれば大丈夫です。
本来、外部リンクの場合はNext.jsのLinkコンポーネントではなく単純に<a>
タグを使うのですが、リンク情報を内側にパスしてあげればOK。これもpassHref
のおかげです。
- <MuiLink>{props.children}</MuiLink>
+ <MuiLink target='_blank' rel='noopener noreferrer'>{props.children}</MuiLink>
target
とrel
はパラメータとして制御してあげてもよさそうです。
Discussion