React Flow en Astro


Instalacion y configuracion de react, mdx y react flow

npm install @astrojs/react
npm install @astrojs/mdx
npm install @xyflow/react

Configuracion

configuramos el archivo astro.config.mjs.

import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';
import sitemap from '@astrojs/sitemap';
import react from '@astrojs/react';
import tailwind from "@astrojs/tailwind";

// https://astro.build/config
export default defineConfig({
  site: 'https://example.com',
  integrations: [mdx(), sitemap(), tailwind(), react()],
});

Ahora vamos a crear un componente con react flow

En src/components/ creamos el componente Flow.tsx

import React from 'react';
import { ReactFlow , MiniMap,
    Controls,
    Background} from '@xyflow/react';
import '@xyflow/react/dist/style.css';


import CustomNode from './Flow/CustomNode';

const nodeTypes = { CustomNode: CustomNode };

export default function App() {
  const initialNodes = [
    { id: '1', position: { x: 0, y: 0 }, data: { label: '22' } , type:'CustomNode'},
    { id: '2', position: { x: 0, y: 100 }, data: { label: '222' } },
  ];
  const initialEdges = [{ id: 'e1-2', source: '1', target: '2' }];
   
  return (
    <div style={{ width: '100%', height: '500px', backgroundColor: "white", color: "gray" }}>
      <ReactFlow nodes={initialNodes} edges={initialEdges} nodeTypes={nodeTypes} >
      <Controls />
        <MiniMap />
        <Background variant="dots" gap={12} size={1} />
      </ReactFlow>
    </div>
  );
}

Renderizado en una pagina

en index.astro u otra pagina importamos y llamamos a nuestro componente

---
import Flow from '../components/Flow';
---

<Flow client:load></Flow>

es muy importante el client:load para que astro renderice el componente en el lado del cliente.

Renderiando el componente en un .mdx

Si queremos armar un diagrama en un .md para eso necesitamos cambiar la extencion a un mdx para poder incluir componentes y etiquetas html en nuestro codigo markdown.

en src/content/blog creamos un archivo flow.mdx donde importamos nuestro componente y lo renderizamos

---
title: 'React Flow en Astro'
description: 'Por que especificar cambios pequeños'
pubDate: '2025-01-26'
heroImage: '/blog-placeholder-3.jpg'
tags: []
---

import Flow from '../../components/Flow';

<Flow client:load></Flow>

ahora podemos ir armando nuestros diferentes diagramas e irlos incluyendo en nuestra pagina de astro.

Ejemplo

React Flow mini map