code.js 791 B

1234567891011121314151617181920212223242526272829
  1. import { useEffect, useState } from "react"
  2. import { codeToHtml} from "shiki"
  3. export function Code ({code, theme, language, transformers, ...divProps}) {
  4. const [codeResult, setCodeResult] = useState("")
  5. useEffect(() => {
  6. async function fetchCode() {
  7. let final_code;
  8. if (Array.isArray(code)) {
  9. final_code = code[0];
  10. } else {
  11. final_code = code;
  12. }
  13. const result = await codeToHtml(final_code, {
  14. lang: language,
  15. theme,
  16. transformers
  17. });
  18. setCodeResult(result);
  19. }
  20. fetchCode();
  21. }, [code, language, theme, transformers]
  22. )
  23. return (
  24. <div dangerouslySetInnerHTML={{__html: codeResult}} {...divProps} ></div>
  25. )
  26. }