Installez notre package avec npm install notice-org/next
import { NTC, NTCFragment, Notice } from "@notice-org/next";
interface Props {
notice: NTCFragment;
}
export default function Page({ notice }: Props) {
return <Notice fragment={notice} />;
}
export async function getServerSideProps() {
const notice = await NTC.fragment({ pageId: "{{{project}}}" });
return {
props: {
notice,
},
};
}
Et voilà, vous êtes prêt !
Si vous avez besoin de plus de granularité, par exemple pour créer votre propre rendu, nous avons ce qu'il vous faut.
1. Obtenez la liste des éléments dans getServerSideProps
export async function getServerSideProps(ctx: any) {
const md = await NTC.markdown({ pageId: ctx.query.id });
const head = await NTC.head({ pageId: ctx.query.id });
return {
props: {
article: md,
head,
},
};
}
2. Créez une fonction qui transforme chaque élément de la liste JSON en un élément React.
function createHeadElements(head: NTCWebElement[]) {
const heads: DOMElement<any, Element>[] = [];
for (let elem of head) {
let element;
if (elem.innerHTML) {
element = React.createElement(elem.tagName, {
...elem.attributes,
dangerouslySetInnerHTML: { __html: elem.innerHTML },
});
} else if (elem.innerText) {
element = React.createElement(elem.tagName, elem.attributes, [elem.innerText]);
} else {
element = React.createElement(elem.tagName, elem.attributes);
}
heads.push(element);
}
return heads;
}
3. Appelez la fonction dans un useMemo et placez vos éléments à l'intérieur de NestJS <Head />
export default function Article({ article, head }: { article: string; head: NTCWebElement[] }) {
const content = useMemo(() => marked.parse(article) as string, [article]);
const headElements = useMemo(() => createHeadElements(head), [head]);
return (
<>
<Head>
{...headElements}
</Head>
<div className="article" dangerouslySetInnerHTML={{ __html: content }}></div>
</>
);
}