Top

Render-as-children Sample

Child Componentを一緒にレンダリングするパターン

Child Component
import { useState } from "react";

const Child = () => {
  return <div>Child Component</div>;
};

export const Container = () => {
  const [open, setOpen] = useState(false);
  return (
    <div>
      <div>
        <button onClick={() => setOpen(!open)}>
          {open ? "Close" : "Open"}
        </button>

        {open && <div>ここにメニューが表示されます</div>}
      </div>

      <div>
        <div>
          <Child />
        </div>
      </div>
    </div>
  );
};

Child Componentをpropsで渡すパターン

Child Component
import { useState } from "react";

const Child = () => {
  return <div>Child Component</div>;
};

interface ContainerProps {
  children: React.ReactNode;
}

const Container = ({ children }: ContainerProps) => {
  const [open, setOpen] = useState(false);
  return (
    <div>
      <div>
        <button onClick={() => setOpen(!open)}>
          {open ? "Close" : "Open"}
        </button>
        {open && <div>ここにメニューが表示されます</div>}
      </div>
      <div>{children}</div>
    </div>
  );
};

export const ContainerWithChild = () => {
  return (
    <Container>
      <Child />
    </Container>
  );
};