TypeScript ver. 에 따라 error 메세지나 event.target에서 값을 못찾는 경우가 있다. (빨간줄)
이때는 아래와 같은 코드로 해결할 수 있다.
if(event.target instanceof Element) setSeletecId(event.target.id```
props.children (컴포넌트) 의 타입은 ReactChild 이다.
import { ReactChild } from "react";
interface IProps {
children: ReactChild;
}
export default function Layout(props: IProps) {
return (
<div>
<div>헤더영역</div>
<div>배너영역</div>
<div>네비게이션영역</div>
<div>{props.children}</div>
<div>풋터영역</div>
</div>
);
}
특정 페이지에서 layout 숨기기
: 알고리즘을 이용해 조건부 렌더링을 해준다.
import { ReactChild } from "react";
import LayoutBanner from "./banner";
import LayoutFooter from "./footer";
import LayoutHeader from "./header";
import LayoutNavigation from "./navigation";
import styled from "@emotion/styled";
import { useRouter } from "next/router";
interface IProps {
children: ReactChild;
}
const LayoutSidebar = styled.div`
min-width: 20vw;
height: 100vh;
background-color: indigo;
`;
const BodyWrapper = styled.div`
display: flex;
`;
const HIDDEN_HEADERS = ["/12-06-modal-address-refactoring"];
const LayoutBody = styled.div``;
export default function Layout(props: IProps) {
const router = useRouter();
console.log(router);
const isHiddenHeader = HIDDEN_HEADERS.includes(router.asPath);
return (
<div>
{!isHiddenHeader && <LayoutHeader />}
<LayoutBanner />
<LayoutNavigation />
<BodyWrapper>
<LayoutSidebar />
<LayoutBody>{props.children}</LayoutBody>
</BodyWrapper>
<LayoutFooter />
</div>
);
}
import { ApolloClient, InMemoryCache, ApolloProvider } from "@apollo/client";
import { AppProps } from "next/dist/shared/lib/router/router";
import "antd/dist/antd.css";
import Layout from "../src/components/commons/layout";
import { Global } from "@emotion/react";
import { globalStyles } from "../src/commons/styles/globalStyles";
function MyApp({ Component, pageProps }: AppProps) {
const client = new ApolloClient({
uri: "http://example.codebootcamp.co.kr/graphql",
cache: new InMemoryCache(),
});
return (
<ApolloProvider client={client}>
<Global styles={globalStyles} />
<Layout>
<Component {...pageProps} />
</Layout>
</ApolloProvider>
);
}
export default MyApp;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
: carousel 관련 library, 사용자가 많아 doc가 따로 있다.