# Using in NextJS Read the document to find out how to use React AsyncAPI component in the NextJS project. You can generate static documentation using the component or embed a dynamic component (for dynamic data) in your application. ## Prerequisites First read the [Readme](../../Readme.md) document and install the React AsyncAPI component by: ```sh npm install --save @asyncapi/react-component@next ``` ## Usage without SSR/SSG (dynamic documentation) As mentioned in the introduction, the component can generate static documentation or be embedded in the application as a dynamic component for dynamic data. The `@asyncapi/react-component` package has a special `umd` bundle that can be used in the NextJS project. Unfortunately, it only works in the browser itself (due to some dependencies). Due to the universal/isomorphic nature (JS code can run on the server and client side) of NextJS, it is recommended to use the component as below: ```jsx // Import component using `dynamic` helper import dynamic from 'next/dynamic'; // Import styles import "@asyncapi/react-component/styles/default.min.css"; // Import component without SSR/SSG const AsyncApiComponent = dynamic(() => import('@asyncapi/react-component/browser'), { ssr: false }); // `schema` and `config` are these same properties as for normal AsyncAPI React component export default function AsyncApiDocs({ schema, config }) { // Render on the browser only if (typeof navigator === 'undefined') return null; return schema && ; } ``` ## Usage with SSR/SSG (static documentation) To generate static documentation (and then hydrate it), we need to download an [AsyncAPI Parser](https://github.com/asyncapi/parser-js) that will validate and parse our specs before rendering it - by default, the `@asyncapi/react-component/browser` bundle has a parser built into the component. ```sh npm install --save @asyncapi/parser ``` Then we need to use the parser and component as follows: ```js import { parse } from "@asyncapi/parser"; // import component without parser onboard import { AsyncApiComponentWP } from "@asyncapi/react-component"; // Import styles import "@asyncapi/react-component/styles/default.min.css"; export default function AsyncApiDocsPage({ asyncapi }) { const config = {}; // Configuration for component. This same as for normal React component return ( ) } // This function gets called at build time export async function getStaticProps() { const schema = `...`; // AsyncAPI specification, fetched or pasted. // validate and parse const parsed = await parse(schema); // Circular references are not supported. See https://github.com/asyncapi/parser-js/issues/293 const stringified = JSON.stringify(parsed.json()); return { props: { asyncapi: stringified, }, } } ``` Some benefits using above solution: - specification is validated and parsed in build time of page, thus avoiding unnecessary operations on the browser side. Finally rendering is faster. - final bundle of page is much less. The component with the parser weights around 700kb compared to 150kb without.