我想在Next.js App Router中使用Mantine UI.

Mantine UI 是什么?

这是一个React的UI库。
像MaterialUI、ChakraUI这样的知名库,类似的东西。

作为特征,

スクリーンショット 2023-09-29 19.53.03.png

在没有必要采用相对独特风格的管理界面等方面,此库非常易于使用。

請問?

Mantine UI 在其CSS in JS框架中采用了Emotion。据说,Mantine v7 alpha 不使用Emotion。

目前的App Router尚不支持Emotion。

 

所以如果不这样做,就不能使用它,所以必须在客户端指定进行css输出处理。

防控措施

在应用程序目录下创建以下文件。

'use client'

import React, { useState } from 'react'
import { useServerInsertedHTML } from 'next/navigation'
import { ServerStyleSheet, StyleSheetManager } from 'styled-components'

export default function StyledComponentsRegistry({ children }: { children: React.ReactNode }) {
  // Only create stylesheet once with lazy initial state
  // x-ref: https://reactjs.org/docs/hooks-reference.html#lazy-initial-state
  const [styledComponentsStyleSheet] = useState(() => new ServerStyleSheet())

  useServerInsertedHTML(() => {
    const styles = styledComponentsStyleSheet.getStyleElement()
    styledComponentsStyleSheet.instance.clearTag()
    return styles
  })

  if (typeof window !== 'undefined') return <>{children}</>

  return (
    <StyleSheetManager sheet={styledComponentsStyleSheet.instance}>{children}</StyleSheetManager>
  )
}

接下来,修改位于app目录中的layout文件。

import StyledJsxRegistry from './registry'
 
export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html>
      <body>
        <StyledJsxRegistry>{children}</StyledJsxRegistry>
      </body>
    </html>
  )
}

是的,这样就结束了。
如果进行上述的处理,我想在App Router上也能使用ManineUi!

总结

由于添加的处理方式,RSC将无法使用,所以与App Router的兼容性似乎不太好。
嗯,如果有人想个人尝试使用App Router和Mantine UI!请随便试试吧!
如果有任何问题或指导意见,请留言给我,我会很高兴的!

以上! !)

以上!