NextJS를 사용한 CloudScape 설계
12530 단어 nextjscloudscape
클라우드스케이프란?
Cloudscape Design System은 규모에 맞게 직관적이고 매력적이며 포용적인 사용자 경험을 구축하기 위한 오픈 소스 솔루션입니다. Cloudscape는 구현을 간소화하기 위한 디자인 리소스 및 프런트 엔드 구성 요소와 함께 웹 애플리케이션을 만들기 위한 광범위한 지침 세트로 구성됩니다.
Cloudscape는 Amazon Web Services(AWS) 제품 및 서비스용으로 구축되었으며 사용됩니다. 그들은 2016년에 AWS 서비스가 소유한 웹 애플리케이션 전체에서 사용자 경험을 개선하고 팀이 해당 애플리케이션을 더 빠르게 구현할 수 있도록 돕기 위해 이 서비스를 만들었습니다.
Cloudscapehere에 대한 자세한 내용을 읽을 수 있습니다.
이것은 아름다운 디자인 시스템이며 즉시 사용 가능한 구성 요소 기능 측면에서 많은 것을 제공합니다. 모든 사람이 사용해 보도록 적극 권장합니다.
클라우드스케이프 설치
NextJS 사용자의 경우 다음 명령을 실행하여 Cloudscape를 설치할 수 있습니다.
npm install @cloudscape-design/global-styles @cloudscape-design/components
NextJS와 CloudScape 통합
다음으로 이를 애플리케이션에 통합해야 합니다. 먼저 CloudScape 전역 스타일 패키지를 앱으로 가져옵니다.
pages/_app.{jsx,tsx}
파일에서 이 작업을 수행해 보겠습니다.import '@cloudscape-design/global-styles'
전역 스타일을 포함시킨 후 응용 프로그램에서 일부 구성 요소를 사용해 보겠습니다.
import { useState } from 'react'
import Header from '@cloudscape-design/components/header'
import Container from '@cloudscape-design/components/container'
import SpaceBetween from '@cloudscape-design/components/space-between'
import Input from '@cloudscape-design/components/input'
import Button from '@cloudscape-design/components/button'
export default function Home() {
const [value, setValue] = useState('')
return (
<SpaceBetween size="m">
<Header variant="h1">Hello World!</Header>
<Container>
<SpaceBetween size="s">
<span>Start editing to see some magic happen</span>
<Input value={value} onChange={(event) => setValue(event.detail.value)} />
<Button variant="primary">Click me</Button>
</SpaceBetween>
</Container>
</SpaceBetween>
)
}
그것을 실행하고 무슨 일이 일어나는지보십시오.
이 오류는 기본 CSS 모듈을 구현하는 NextJS로 인해 발생합니다. NextJS 플러그인을 사용하여 스타일을 NextJS가 이해할 수 있는 기본 CSS 모듈로 변환하여 이 문제를 해결할 수 있습니다.
npm install -D next-transpile-modules next-compose-plugins
플러그인을 설치한 후 다음과 같이 수정
next.config.js
해야 합니다.const withTranspileModules = require('next-transpile-modules')
const withPlugins = require('next-compose-plugins')
const nextConfig = {
// other config options
}
// Here we will add a plugin to our configuration to transpile the CloudScape components into
module.exports = withPlugins([withTranspileModules(['@cloudscape-design/components'])], nextConfig)
보너스, typescript를 사용하는 경우 파일
next.config.js
은 다음과 같아야 합니다.const withTM = require('next-transpile-modules')(['@cloudscape-design/components']);
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
swcMinify: true,
}
const buildConfig = _phase => {
const plugins = [withTM]
const config = plugins.reduce((acc, next) => next(acc), {
...nextConfig
})
return config
}
module.exports = buildConfig();
NextJS 개발 서버를 다시 시작하면 더 이상 오류 메시지가 표시되지 않습니다. 다음 출력도 표시됩니다.
와우, 작동하는 것 같습니다! 그러나 잠시만 기다리십시오. 일부 오류 메시지가 여전히 콘솔에 표시됩니다.
Warning: useLayoutEffect does nothing on the server, because its effect cannot be encoded into the server renderer's output format. This will lead to a mismatch between the initial, non-hydrated UI and the intended UI. To avoid this, useLayoutEffect should only be used in components that render exclusively on the client. See https://reactjs.org/link/uselayouteffect-ssr for common fixes.
at InternalContainer (webpack-internal:///./node_modules/@cloudscape-design/components/container/internal.js:32:21)
at Container (webpack-internal:///./node_modules/@cloudscape-design/components/container/index.js:24:17)
이는 Cloudscape가
useLayoutEffect
후크를 사용하여 구성 요소를 렌더링하기 때문입니다.그리고
useLayoutEffect
후크는 서버 렌더러에서 지원되지 않습니다.Cloudscape 팀은 현재 useLayoutEffect를 교체할 계획이 없습니다.
이에 대한 자세한 내용을 읽을 수 있습니다here.
이 문제를 해결하려면
_app.js
에 추가하면 됩니다.import React from 'react'
if (typeof window === 'undefined') React.useLayoutEffect = () => {}
그게 다야, 우리는 갈 수있어! 이제 코드가 예상대로 작동합니다.
읽어 주셔서 감사합니다! 이 정보가 도움이 되었기를 바랍니다. :)
GitHub에서 사용 가능한 코드
Reference
이 문제에 관하여(NextJS를 사용한 CloudScape 설계), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/binhbv/cloudscape-design-with-nextjs-24i6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)