📍 renderToString

TODO: 공식문서 이해하기

// renderToString을 활용해 리액트 컴포넌트를 HTML 문자열로 만들어낸 모습
import ReactDOMServer from "react-dom/server";

function ChildrenComponent({ fruits }: { fruits: Array<string> }) {
  useEffect(() => {
    console.log(fruits);
  }, [fruits]);

  function handleClick() {
    console.log("hello");
  }

  return (
    <ul>
      {fruits.map((fruit) => (
        <li key={fruit} onClick={handleClick}>
          {fruit}
        </li>;
      ))}
    </ul>
  );
}

function SampleComponent() {
  return (
    <>
      <div>hello</div>
      <ChildrenComponent fruits={["apple", "banana", "peach"]} />
    </>
  );
}

const result = ReactDOMServer.renderToString(
  React.createElement("div", { id: "root" }, <SampleComponent />)
);

위 result는 다음과 같은 문자열을 반환함

<div id="root" data-reactroot="">
  <div>hello</div>
  <ul>
    <li>apple</li>
    <li>banana</li>
    <li>peach</li>
  </ul>
</div>

✏️ 장점

👀 눈 여겨볼 점

  1. 이벤트 핸들러는 결과물에 포함되지 않았음
  1. div#root에 존재하는 속성인 data-reactroot

📍 renderToStaticMarkup