도큐사우루스 클라이언트 API
도큐사우루스는 사이트를 만들 때 도움이 될 만한 API를 클라이언트에서 사용할 수 있게 제공합니다.
컴포넌트
<ErrorBoundary />
이 컴포넌트는 리액트 에러 경계를 만듭니다.
이를 사용해 컴포넌트를 래핑하고 에러가 발생했을 때 전체 앱 오류로 처리하는 대신 대체할 수 있는 UI를 보여줄 수 있습니다.
import React from 'react';
import ErrorBoundary from '@docusaurus/ErrorBoundary';
const SafeComponent = () => (
<ErrorBoundary
fallback={({error, tryAgain}) => (
<div>
<p>This component crashed because of error: {error.message}.</p>
<button onClick={tryAgain}>Try Again!</button>
</div>
)}>
<SomeDangerousComponentThatMayThrow />
</ErrorBoundary>
);
동작을 확인하려면 클릭해보세요.
도큐사우루스는 해당 컴포넌트를 사용해 테마 레이아웃과 전체 앱에서 발생하는 오류를 처리할 수 있습니다.
해당 컴포넌트는 빌드 시 오류는 처리하지 않으며 안정된 리액트 컴포넌트 사용 시 발생할 수 있는 클라이언트 측 렌더링 오류에 대해서만 처리합니다.
속성
fallback
: JSX 요소를 반환하는 렌더 콜백 옵션입니다. 두 개의 속성을 가진 오브젝트를 받을 수 있습니다.error
는 처리할 에러 그리고tryAgain
는 컴포넌트 내에서 에러를 초기화하고 다시 렌더링하기 위한 콜백 함수(() => void
)입니다. 반환되는 것이 없다면@theme/Error
에서 대신 렌더링합니다.@theme/Error
는 레이아웃 위에서 사이트를 래핑하는 에러 경계(Error Boundaries)로 사용됩니다.
fallback
속성은 콜백이며 리액트 기능 컴포넌트가 아닙니다. 콜백 내에서 리액트 후크를 사용할 수 없습니다.
<Head/>
재사용할 수 있는 리액트 컴포넌트로 문서 헤더 영역의 수정을 관리할 수 있습니다. 일반적인 HTML 태그를 사용하며 실제 출력 결과도 일반적인 HTML 태그입니다. 초보자들에게 적합합니다. 리액트 헬멧(React Helmet) 래퍼 컴포넌트입니다.
아래와 같이 작성합니다.
import React from 'react';
import Head from '@docusaurus/Head';
const MySEO = () => (
<Head>
<meta property="og:description" content="My custom description" />
<meta charSet="utf-8" />
<title>My Title</title>
<link rel="canonical" href="http://mysite.com/example" />
</Head>
);
중첩되거나 나중에 정의된 컴포넌트는 이전 값을 덮어씁니다.
<Parent>
<Head>
<title>My Title</title>
<meta name="description" content="Helmet application" />
</Head>
<Child>
<Head>
<title>Nested Title</title>
<meta name="description" content="Nested component" />
</Head>
</Child>
</Parent>
출력 결과는 아래와 같습니다.
<head>
<title>Nested Title</title>
<meta name="description" content="Nested component" />
</head>
<Link/>
내부 페이지에 연결하거나 미리 콘텐츠를 불러와서(preloading) 성능을 최적화할 수 있는 기능을 사용할 수 있습니다. 사전 로딩(preloading)은 사용자가 컴포넌트를 사용하는 시점에 필요한 리소스를 미리 가져오는 방식입니다. <Link>
가 viewport 내에 있을 때 낮은 우선순위의 요청을 처리하기 위해 IntersectionObserver
를 사용합니다. 그리고 사용자가 높은 우선순위의 리소스를 요청하려고 할 때는 onMouseOver
이벤트를 발생시킵니다.
리액트 라우터의 <Link>
의 래퍼 컴포넌트이며 도큐사우루스 특성에 맞게 몇 가지 유용한 기능을 확장했스니다. 모든 속성 설정은 리액트 라우터의 <Link>
컴포넌트로 전달됩니다.
외부 링크에도 적용할 수 있습니다. 자동으로 target="_blank" rel="noopener noreferrer"
속성을 추가합니다.
import React from 'react';
import Link from '@docusaurus/Link';
const Page = () => (
<div>
<p>
Check out my <Link to="/blog">blog</Link>!
</p>
<p>
Follow me on <Link to="https://twitter.com/docusaurus">Twitter</Link>!
</p>
</div>
);
to
: string
탐색할 주소를 설정합니다. 예를 들어 /docs/introduction
같은 형식입니다.
<Link to="/courses" />
<Link>
를 사용하면 도큐사우루스에서 많은 부분 최적화(예. 깨진 경로 감지, 프리페칭, base URL 적용 등)를 처리해주기 때문에 <a>
태그보다 이 컴포넌트를 권장합니다.
<Redirect/>
<Redirect>
은 새로운 주소의 콘텐츠로 바로 가기 위해 사용합니다. 새로운 주소는 방문 기록 상 현재 주소를 덮어씁니다. 마치 서버에서 리다이렉트(HTTP 3xx)를 처리하는 것과 같습니다. 사용할 수 있는 속성에 대해서는 리액트 라우터의 리다이렉트 문서를 참고하세요.
Example usage:
import React from 'react';
import {Redirect} from '@docusaurus/router';
const Home = () => {
return <Redirect to="/docs/test" />;
};
@docusaurus/router
는 리액트 라우터 기반으로 모든 기능을 지원합니다.
<BrowserOnly/>
<BrowserOnly>
컴포넌트는 리액트 앱이 하이드레이트되면 브라우저에서만 리액트 컴포넌트를 렌더링하도록 허용합니다.
window
또는 document
오브젝트에 액세스한 상태에서 Node.js에서 실행할 수 없는 코드와 통합을 위해 사용합니다.