React · Aussi Remix et React Router
Édition visuelle pour React, sur WordPress.
React avec Vite, Remix ou React Router : un composant à côté de votre app, et field() sur ce que les éditeurs doivent pouvoir modifier.
- 01
Autorisez l’éditeur à afficher votre site
Définissez l’en-tête chez votre hébergeur, et dans vite.config.ts pour vite dev et vite preview.
public/_headers · Netlify · Cloudflare Pages /* Content-Security-Policy: frame-ancestors 'self' https://cms.example.comvercel.json · Vercel { "headers": [ { "source": "/(.*)", "headers": [ { "key": "Content-Security-Policy", "value": "frame-ancestors 'self' https://cms.example.com" } ] } ] }vite.config.ts · Serveur de dev import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; const csp = "frame-ancestors 'self' https://cms.example.com"; export default defineConfig({ plugins: [react()], server: { headers: { 'Content-Security-Policy': csp } }, preview: { headers: { 'Content-Security-Policy': csp } }, }); - 02
Ajoutez le bridge
Installez le package, puis ajoutez le composant à côté de votre app dans src/main.tsx.
Terminal npm install leihosrc/main.tsx import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import { LeihoBridge } from 'leiho/react'; import App from './App'; createRoot(document.getElementById('root')!).render( <StrictMode> <App /> <LeihoBridge wpOrigin="https://cms.example.com" /> </StrictMode> );Remix ou React Router : placez-le dans app/root.tsx.
- 03
Lisez le contenu
L’app récupère une page à la fois, depuis le navigateur.
src/usePage.ts import { useEffect, useState } from 'react'; export function usePage(path: string) { const [page, setPage] = useState<any>(null); useEffect(() => { const url = new URL('https://cms.example.com/wp-json/leiho/v1/content'); url.searchParams.set('path', path); let cancelled = false; fetch(url) .then((res) => res.json()) .then((items) => { if (!cancelled) setPage(items[0] ?? null); }); return () => { cancelled = true; }; }, [path]); return page; }Loaders Remix ou React Router : utilisez plutôt loadLeihoContent depuis leiho/content.
- 04
Marquez ce que les éditeurs peuvent modifier
Appliquez field() sur chaque élément que les éditeurs doivent pouvoir modifier. Affichez toujours l’élément, même quand sa valeur est vide.
JSX import { field, entry } from 'leiho'; // field() writes data-wp-post + data-wp-field, entry() names a section. // Flexible content rows: block(page, 'sections', i, 'Label'). <section {...entry(page, 'Hero')}> <h1 {...field(page, 'hero_title')}>{page.fields.hero_title}</h1> <img {...field(page, 'hero_image')} src={page.fields.hero_image?.url} alt={page.fields.hero_image?.alt} /> {page.fields.cards?.map((card, i) => ( <article key={i} {...field(page, `cards.${i}.title`)}>{card.title}</article> ))} </section>
Remplacez https://cms.example.com par l’adresse de votre WordPress. Dans wp-admin, Leiho → Démarrer affiche ces étapes avec votre adresse, vérifie chacune et peut confier toute l’installation à votre agent de code en une seule consigne.
Modifiez le vrai site.
Gratuit et open source. Essayez-le sur un vrai WordPress, dans votre navigateur.