J’écris des tutoriels pour des langages de programmation différents.
Comme j’utilise Gatsby, pour montrer de code coloré, on peut employer react-prism-renderer . C’est un bon plugiciel pour le faire. Par défaut, il vient avec une grande variété de coding languages actifs. C’est mon composant pour enseigner mes *snippets *de code dans mon blogue.
Mais quand j’écrivais des blocs de code, certains n’étaient pas colorés. Qu’est-ce qui est passé?
🧱 Mon composant pour colorer le code
React prism renderer utilise PrismJS, et on peut le profiter. On doit importer le langage qu’on a besoin de colorer.
Ceci le code. Avec ce snippet, on peut créer un composant React dans Gatsby. Faire attention des lignes avec require.
1
import React, { useContext } from 'react';2
import Highlight, { defaultProps, Language } from 'prism-react-renderer';4
import nightOwlNight from 'prism-react-renderer/themes/nightOwlLight';5
import nightOwl from 'prism-react-renderer/themes/nightOwl';6
import Prism from 'prism-react-renderer/prism';8
import { ThemeContext } from '../Layout';11
require('prismjs/components/prism-php');12
require('prismjs/components/prism-ruby');13
require('prismjs/components/prism-yaml');14
require('prismjs/components/prism-docker');15
require('prismjs/components/prism-bash');16
require('prismjs/components/prism-ignore');23
const Code = ({ children, className }: Props): JSX.Element => {24
const context = useContext(ThemeContext);25
const language = (className.replace(/language-/, '') || '') as Language;30
theme={context.isLightTheme ? nightOwlNight : nightOwl}34
{({ className, style, tokens, getLineProps, getTokenProps }) => (35
<pre className={`${className} overflow-x-auto`} data-testid="code-highlight" style={{ ...style }}>36
{tokens.map((line, index) => {37
const lineProps = getLineProps({ line, key: index });39
<div key={index} {...lineProps}>40
{line.map((token, key) => (41
<span key={key} {...getTokenProps({ token, key })} />
Donc, si tu utilises MDX ou similaires pour créer tes pages. Tu peux écrire le composant comme suit.
1
import { MDXProvider } from '@mdx-js/react';2
import { MDXRenderer } from 'gatsby-plugin-mdx';3
import Code from '../components/Mdx/Code'; 5
const MyCode = (props: { children: string; className: string }) => <Code {...props} />;7
<MDXProvider components={{ code: MyCode }}>8
<MDXRenderer>{mdx.body}</MDXRenderer>
Et puis, toutes tes balises HTML <code> auront son code coloré
🎙 Qu’est-ce que ce code fait?
Le composant <Highlight/> est utilisé par React Prism Renderer pour ajouter de la couleur à la syntaxe du code.
Certains langages devront être ajoutés explicitement. Je recommande de vérifier le dossier /node_modules/prismjs/components/ pour plus d’information.
1
require('prismjs/components/prism-php');2
require('prismjs/components/prism-ruby');3
require('prismjs/components/prism-yaml');4
require('prismjs/components/prism-docker');5
require('prismjs/components/prism-bash');6
require('prismjs/components/prism-ignore');
Le lien originel dont j’ai pris la solution:
ici . Ce tutoriel élargit cette réponse.
Le code d’exemple pour être obsolète dans le futur. Jette un coup d’œil à mon composant
ici.