dev_AI_framework

각 화면에 해당하는 설명들을 구성해야 해... 동적 방식이 아닌 정적 방식으로 구현하자 - 파일 설명의 작성 부분에 llm 을 적용시킬 수 있음 코드 내용 요약 등등

명징직조지훈 2024. 11. 29. 15:24

string 형식으로 단순히 저장되어 있는 코드들, 

이를 동적으로 관리할 수 있는 방법이 있을까?

 

그런데 이 또한 문제로 하이라이트에 해당하는 부분의 지정 문제가 발생함...

이를 동적으로 구현하기는 힘들 것 

 

1. 파일 이름과 내용을 직접 FilesData.js에 작성

FilesData.js에 각 파일의 내용을 문자열로 작성합니다. 파일을 동적으로 읽지 않고, 데이터를 명시적으로 선언합니다.

const files = [
  {
    fileName: "App.js",
    code: `
import React from "react";
import FileViewer from "./FileViewer";
import files from "./FilesData";

const App = () => {
  return (
    <div>
      <h1>Code Files Viewer</h1>
      <FileViewer files={files} />
    </div>
  );
};

export default App;
    `,
  },
  {
    fileName: "FileViewer.js",
    code: `
import React from "react";
import { Link } from "react-router-dom";

const FileViewer = ({ files }) => {
  return (
    <div>
      <h1>Code Files</h1>
      <ul>
        {files.map((file, index) => (
          <li key={index}>
            <Link to={\`/file/\${file.fileName}\`}>
              {file.fileName}
            </Link>
          </li>
        ))}
      </ul>
    </div>
  );
};

export default FileViewer;
    `,
  },
  {
    fileName: "FileDetail.js",
    code: `
import React from "react";
import { useParams, Link } from "react-router-dom";
import { Light as SyntaxHighlighter } from "react-syntax-highlighter";
import { docco } from "react-syntax-highlighter/dist/esm/styles/hljs";

const FileDetail = ({ files }) => {
  const { fileName } = useParams();
  const file = files.find((f) => f.fileName === fileName);

  if (!file) {
    return <div>File not found</div>;
  }

  return (
    <div>
      <h2>{file.fileName}</h2>
      <SyntaxHighlighter language="javascript" style={docco}>
        {file.code}
      </SyntaxHighlighter>
      <Link to="/">Back to file list</Link>
    </div>
  );
};

export default FileDetail;
    `,
  },
];

export default files;

 

파일 데이터를 컴포넌트에서 사용

App.js에서 FilesData.js를 가져와 FileViewer와 FileDetail에 전달합니다.

import React from "react";
import { BrowserRouter as Router, Route, Routes } from "react-router-dom";
import FileViewer from "./FileViewer";
import FileDetail from "./FileDetail";
import files from "./FilesData";

const App = () => {
  return (
    <Router>
      <Routes>
        <Route path="/" element={<FileViewer files={files} />} />
        <Route path="/file/:fileName" element={<FileDetail files={files} />} />
      </Routes>
    </Router>
  );
};

export default App;

 

 

필요할 때 데이터 추가

새로운 파일을 추가하려면 FilesData.js에 객체를 추가하면 됩니다.

 

각 페이지에 설명을 추가하려면 FilesData.js에 설명 필드를 추가하고, 이를 컴포넌트에서 렌더링하면 됩니다.

 

FilesData.js에 설명 필드 추가

description 필드를 추가하여 각 파일에 대한 설명을 포함합니다. - 여기서 llm 이 사용될 수 있음 description 의 내용을 불러오는 등의 로직 구현

const files = [
  {
    fileName: "App.js",
    description: "This is the main entry point of the React application.",
    code: `
import React from "react";
import FileViewer from "./FileViewer";
import files from "./FilesData";

const App = () => {
  return (
    <div>
      <h1>Code Files Viewer</h1>
      <FileViewer files={files} />
    </div>
  );
};

export default App;
    `,
  },
  {
    fileName: "FileViewer.js",
    description: "This component renders the list of files with links to their details.",
    code: `
import React from "react";
import { Link } from "react-router-dom";

const FileViewer = ({ files }) => {
  return (
    <div>
      <h1>Code Files</h1>
      <ul>
        {files.map((file, index) => (
          <li key={index}>
            <Link to={\`/file/\${file.fileName}\`}>
              {file.fileName}
            </Link>
          </li>
        ))}
      </ul>
    </div>
  );
};

export default FileViewer;
    `,
  },
  {
    fileName: "FileDetail.js",
    description: "This component shows the detailed code and description of a file.",
    code: `
import React from "react";
import { useParams, Link } from "react-router-dom";
import { Light as SyntaxHighlighter } from "react-syntax-highlighter";
import { docco } from "react-syntax-highlighter/dist/esm/styles/hljs";

const FileDetail = ({ files }) => {
  const { fileName } = useParams();
  const file = files.find((f) => f.fileName === fileName);

  if (!file) {
    return <div>File not found</div>;
  }

  return (
    <div>
      <h2>{file.fileName}</h2>
      <p>{file.description}</p> {/* 설명 출력 */}
      <SyntaxHighlighter language="javascript" style={docco}>
        {file.code}
      </SyntaxHighlighter>
      <Link to="/">Back to file list</Link>
    </div>
  );
};

export default FileDetail;
    `,
  },
];

export default files;

 

FileDetail.js에서 설명 출력

파일 세부 정보 페이지에서 description 필드를 출력합니다.

import React from "react";
import { useParams, Link } from "react-router-dom";
import { Light as SyntaxHighlighter } from "react-syntax-highlighter";
import { docco } from "react-syntax-highlighter/dist/esm/styles/hljs";

const FileDetail = ({ files }) => {
  const { fileName } = useParams();
  const file = files.find((f) => f.fileName === fileName);

  if (!file) {
    return <div>File not found</div>;
  }

  return (
    <div>
      <h2>{file.fileName}</h2>
      <p style={{ fontStyle: "italic", color: "#555" }}>{file.description}</p> {/* 설명 추가 */}
      <SyntaxHighlighter language="javascript" style={docco}>
        {file.code}
      </SyntaxHighlighter>
      <Link to="/">Back to file list</Link>
    </div>
  );
};

export default FileDetail;

 

FileViewer.js에서 설명 추가 (선택 사항)

목록에서도 파일 설명을 간략하게 보여줄 수 있습니다.

import React from "react";
import { Link } from "react-router-dom";

const FileViewer = ({ files }) => {
  return (
    <div>
      <h1>Code Files</h1>
      <ul>
        {files.map((file, index) => (
          <li key={index} style={{ marginBottom: "16px" }}>
            <Link to={`/file/${file.fileName}`} style={{ fontWeight: "bold" }}>
              {file.fileName}
            </Link>
            <p style={{ margin: "4px 0", color: "#555" }}>{file.description}</p> {/* 간략 설명 추가 */}
          </li>
        ))}
      </ul>
    </div>
  );
};

export default FileViewer;