import React, { useRef, useEffect } from 'react'; import { DiffEditor } from '@monaco-editor/react'; interface DiffProps { original: string; modified: string; language?: string; height?: string | number; } const Diff: React.FC = ({ original, modified, language = 'javascript', height = 400, }) => { const editorRef = useRef(null); const monacoRef = useRef(null); // 卸载时主动 dispose useEffect(() => { return () => { if (editorRef.current && monacoRef.current) { const editor = editorRef.current; // DiffEditor getModel() 返回 [original, modified] const models = editor.getModel ? editor.getModel() : []; if (models && Array.isArray(models)) { models.forEach( (model: any) => model && model.dispose && model.dispose() ); } } }; }, []); const handleMount = (editor: any, monaco: any) => { editorRef.current = editor; monacoRef.current = monaco; }; // 处理高度和宽度样式 const boxHeight = typeof height === 'number' ? `${height}px` : height; const boxWidth = 1000; // 默认宽度800px return (
); }; export default Diff;