import { Snippet } from "@/components/Snippet";
import { name } from "eslint-plugin-prettier/recommended";
const reactNestedPropsSnippets = [
{
name: "JSX",
codeLanguage: "jsx",
withLineNumbers: true,
code: `import { useState } from "react";
const App = () => {
const [theme, setTheme] = useState("light");
return ;
};
const A = ({ theme, setTheme }) => {
return ;
};
const B = ({ theme, setTheme }) => {
return ;
};`,
},
{
name: "TSX",
codeLanguage: "tsx",
withLineNumbers: true,
code: `import type { Dispatch, SetStateAction } from "react";
import { useState } from "react";
type Theme = "light" | "dark";
const App = () => {
const [theme, setTheme] = useState("light");
return ;
};
const A = ({ theme, setTheme }: { theme: Theme; setTheme: Dispatch> }) => {
return ;
};
const B = ({ theme, setTheme }: { theme: Theme; setTheme: Dispatch> }) => {
return ;
};`,
},
];
const reactCreateContextSnippets = [
{
name: "JSX",
codeLanguage: "jsx",
withLineNumbers: true,
code: `import { createContext } from "react";
// On crée notre contexte, avec une valeur par défaut : un thème clair
const ThemeContext = createContext({
theme: "light",
setTheme: () => {},
});`,
},
{
name: "TSX",
codeLanguage: "tsx",
withLineNumbers: true,
code: `import type { Dispatch, SetStateAction } from "react";
import { createContext } from "react";
// On crée un type pour les valeurs de thème
export type Theme = "light" | "dark";
// On crée un type pour notre contexte
type ThemeContextType = {
theme: Theme;
setTheme: Dispatch>;
};
// On crée notre contexte, avec une valeur par défaut : un thème clair
const ThemeContext = createContext({
theme: "light",
setTheme: () => {},
});`,
},
];
const reactContextProviderSnippets = [
{
name: "JSX",
codeLanguage: "jsx",
withLineNumbers: true,
code: `import { useState } from "react";
const App = () => {
const [theme, setTheme] = useState("light");
return (
);
};`,
},
{
name: "TSX",
codeLanguage: "tsx",
withLineNumbers: true,
code: `import type { Theme } from "./ThemeContext";
import { useState } from "react";
const App = () => {
const [theme, setTheme] = useState("light");
return (
);
};`,
},
];
const reactContextProviderWithValuesSnippets = [
{
name: "JSX",
codeLanguage: "jsx",
withLineNumbers: true,
code: `import { createContext, useState } from "react";
const ThemeContext = createContext({
theme: "light",
setTheme: () => {},
});
const ThemeProvider = ({ children }) => {
const [theme, setTheme] = useState("light");
return {children};
};
export { ThemeContext, ThemeProvider };`,
},
{
name: "TSX",
codeLanguage: "tsx",
withLineNumbers: true,
code: `import type { ReactNode } from "react";
import { createContext, useState } from "react";
export type Theme = "light" | "dark";
type ThemeContextType = {
theme: Theme;
setTheme: Dispatch>;
};
const ThemeContext = createContext({
theme: "light",
setTheme: () => {},
});
type ThemeProviderProps = {
children: ReactNode;
};
const ThemeProvider = ({ children }: ThemeProviderProps) => {
const [theme, setTheme] = useState("light");
return {children};
};
export { ThemeContext, ThemeProvider };`,
},
];
const reactContextProviderInAppSnippets = [
{
name: "App.jsx",
codeLanguage: "jsx",
withLineNumbers: true,
code: `import { ThemeProvider } from "./ThemeContext";
import A from "./A";
const App = () => {
return (
);
};`,
},
];
const reactUseContextSnippets = [
{
name: "Utilisation du hook `useContext`",
codeLanguage: "jsx",
withLineNumbers: true,
code: `import { ThemeContext } from "./ThemeContext";
import { useContext } from "react";
const C = () => {
const { theme, setTheme } = useContext(ThemeContext);
return <>{/** JSX */}>;
};`,
},
];
const reactContextHellSnippets = [
{
name: "Exemple de contexte imbriqué",
codeLanguage: "jsx",
withLineNumbers: true,
code: `root.render(
,
);`,
},
];
const reactContextProvidersComponentSnippets = [
{
name: "JSX",
codeLanguage: "jsx",
withLineNumbers: true,
code: `const Providers = ({ providers, children }) => {
return (
<>
{/** Ouverture des providers */}
{children}
{/** Fermeture des providers */}
>
);
};`,
},
{
name: "TSX",
codeLanguage: "tsx",
withLineNumbers: true,
code: `import type { ReactNode } from "react";
type ProvidersProps = {
providers: ReactNode[];
children: ReactNode;
};
const Providers = ({ providers, children }: ProvidersProps) => {
return (
<>
{/** Ouverture des providers */}
{children}
{/** Fermeture des providers */}
>
);
};`,
},
];
const reactNestFunctionSnippets = [
{
name: "JSX",
codeLanguage: "jsx",
code: `const nest = (children, component) => {
return React.cloneElement(component, {}, children);
};`,
},
{
name: "TSX",
codeLanguage: "tsx",
code: `const nest = (children: ReactNode, component: ReactNode) => {
return React.cloneElement(component, {}, children);
};`,
},
];
const reactNestFunctionWithReduceRightSnippets = [
{
name: "JSX",
codeLanguage: "jsx",
code: `const nest = (children, component) => {
return React.cloneElement(component, {}, children);
};
const Providers = ({ providers, children }) => {
return providers.reduceRight(nest, children);
};`,
},
{
name: "TSX",
codeLanguage: "tsx",
code: `import type { ReactNode } from "react";
type ProvidersProps = {
providers: ReactNode[];
children: ReactNode;
};
const nest = (children: ReactNode, component: ReactNode) => {
return React.cloneElement(component, {}, children);
};
const Providers = ({ providers, children }: ProvidersProps) => {
return providers.reduceRight(nest, children);
};`,
},
];
const reactCleanerProvidersSnippets = [
{
name: "Import lisible et maintenable pour les providers",
codeLanguage: "jsx",
code: `root.render(
,
,
,
,
,
,
,
// ...
]}
>
,
);`,
},
];
export default {
reactNestedProps: () => ,
reactCreateContext: () => ,
reactContextProvider: () => (
),
reactContextProviderWithValues: () => (
),
reactContextProviderInApp: () => (
),
reactUseContext: () => ,
reactContextHell: () => ,
reactContextProvidersComponent: () => (
),
reactNestFunction: () => ,
reactNestFunctionWithReduceRight: () => (
),
reactCleanerProviders: () => (
),
};