React 18, Next.js 13부터 Server Component가 도입, 지원된다.
server component, client component 두 가지 형식으로 컴포넌트를 만들 수 있다.
hydration: 정적 html을 로드하고나서, js, react를 적용해 interactive한 요소들로 채워지는 과정
정답부터 말하자면 ❌틀렸다❌
1'use client' 2 3// You cannot import a Server Component into a Client Component. 4import ServerComponent from './Server-Component' 5 6export default function ClientComponent({ 7 children, 8}: { 9 children: React.ReactNode 10}) { 11 const [count, setCount] = useState(0) 12 13 return ( 14 <> 15 <button onClick={() => setCount(count + 1)}>{count}</button> 16 17 <ServerComponent /> 18 </> 19 ) 20}
1'use client' 2 3import { useState } from 'react' 4 5export default function ClientComponent({ 6 children, 7}: { 8 children: React.ReactNode 9}) { 10 const [count, setCount] = useState(0) 11 12 return ( 13 <> 14 <button onClick={() => setCount(count + 1)}>{count}</button> 15 {children} 16 </> 17 ) 18}
1// This pattern works: 2// You can pass a Server Component as a child or prop of a 3// Client Component. 4import ClientComponent from './client-component' 5import ServerComponent from './server-component' 6 7// Pages in Next.js are Server Components by default 8export default function Page() { 9 return ( 10 <ClientComponent> 11 <ServerComponent /> 12 </ClientComponent> 13 ) 14}
이 경우 server component와 client component는 decoupled 되고, 독립적으로 rendering 된다.