인프런 커뮤니티 질문&답변

이수경님의 프로필 이미지

작성한 질문수

React + GPT API로 AI회고록 서비스 개발 (원데이 클래스)

React - 사용자 입력 처리

질문있어요. React 사용자 처리 수업에서

24.08.12 15:38 작성

·

42

0

image.png

이게 계속로딩중이라고 뜹니다

import { Input,  Button} from 'antd';
const { TextArea } = Input;
import { useState } from "react";// 저장하는 곳임포트


const DiaryInput = (isLoading, onSubmit) => {
  const [userInput, setUserInput] = useState("");

// isLoading 로딩상태에서 사용하는 변수
// inSubmit 다입력 작성하면 사용


const handleUserInput = (e) => {
  setUserInput(e.target.value);
};

const handleClick = () => {
  onSubmit(userInput);
};

return (
  <div>
    <TextArea
      value={userInput}
      onChange={handleUserInput}
      placeholder="오늘 일어난 일들을 간단히 적어주세요."
    />
    <Button loading={isLoading} onClick={handleClick}>
      GPT 회고록을 작성해줘!
    </Button>
  </div>
);
}
export default DiaryInput;
import { useState } from 'react';
import { CallGPT } from './api/gpt';
import DiaryInput from './components/DiaryInput';

const dummyData = {
  "title": "고립된 개발자의 고민",
  "thumbnail": "https://source.unsplash.com/1600x900/?programming",
  "summary": "혼자 코딩과제를 진행하면서 걱정이다.",
  "emotional_content": "최근 혼자 코딩과제를 진행하면서, 협업이 없이 모든 것을 혼자 결정하고 해결해야 한다는 부담감에 많이 무겁습니다. 강의를 듣고 최선을 다해 프로젝트를 진행했지만, 예상치 못한 버그들로 인해 스트레스가 많이 쌓였습니다. 스택오버플로와 GPT를 통해 문제를 해결하긴 했지만, 이러한 문제해결 방식이 정말로 제 개발 실력을 향상시키는지에 대해 의문이 듭니다. 왠지 스스로의 능력을 시험할 기회를 잃은 것 같아 아쉽고, 불안감도 커지고 있습니다.",
  "emotional_result": "이 일기에서 감지되는 감정은 불안, 부담감, 그리고 자신감의 결여입니다. 고립된 상황에서의 성공에 대한 압박감과 문제 해결 방법에 대한 의심은 정서적으로 큰 부담을 주고 있습니다. 자기 효능감이 낮아짐을 느끼는 상황입니다.",
  "analysis": "고립되어 문제를 해결하는 과정은 큰 스트레스와 불안을 유발할 수 있습니다. '혼자서 하는 일은 좋은 일이든 나쁜 일이든 더욱 크게 느껴진다'는 에릭 에릭슨의 말처럼, 혼자서 모든 것을 해결하려는 시도는 때로는 개인의 성장에 도움이 될 수 있지만, 지속적인 고립은 자기 효능감을 저하시킬 수 있습니다. 이러한 상황에서는 자신의 노력을 인정하고, 필요한 경우 도움을 요청하는 것이 중요합니다.",
  "action_list": [
    "프로젝트 중 발생하는 문제를 혼자 해결하려 하지 말고, 멘토나 동료 개발자와 상의를 통해 해결 방안을 모색하라.",
    "정기적으로 자신의 학습 방법과 진행 상황을 평가하여, 필요한 경우 학습 방식을 조정하라.",
    "개발 과정에서의 스트레스 관리를 위해 적절한 휴식과 여가 활동을 통해 정서적 안정을 찾으라."
  ]
};


function App() {
  const [data, setData] = useState(dummyData);
  // 우선 빈문자열로 해놓고
  const [isLoading, setIsLoading] = useState(false);

  const handleClickAPICall = async (userInput) => {
      try {
          setIsLoading(true);// 처음에는 로딩을 트루
          
          const message = await CallGPT({
              prompt: `${userInput}`,
          });
            
           // Assuming callGPT is a function that fetches data from GPT API
          setData(JSON.parse(message)); 
        
      } catch (error) {
          // Handle error (you might want to set some error state here)
      } finally {
          setIsLoading(false);//다음에는 펄스로
      }
  };
  

  const handleSubmit = (userInput) => {
    handleClickAPICall(userInput);
  };
  
  console.log(">>data", data);

  return (
    <>
      <DiaryInput isLoading={isLoading} onSubmit ={handleSubmit} />
      <button onClick={handleClickAPICall}>GPT API call</button>
      <div>title : {data?.title}</div>
      <div>analysis : {data?.analysis}</div>
      <div>emotional_content : {data?.emotional_content}</div>
      <div>emotional_result : {data?.emotional_result}</div>
    </>
  );
  
};
export default App;

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 08. 13. 15:41

안녕하세요, 인프런 AI 인턴입니다.

코드를 살펴보니, <DiaryInput /> 컴포넌트를 사용하는 부분에서 isLoadingonSubmit을 정확하게 prop으로 전달하고 있지만, DiaryInput 컴포넌트에서 이 props를 받는 방식에 문제가 있는 것 같습니다. React 컴포넌트에서 props를 받을 때는 함수의 파라미터로 받아야 하는데, 현재 DiaryInput 컴포넌트는 일반 함수의 파라미터처럼 개별 변수로 받고 있습니다. 이를 해결하기 위해 다음과 같이 수정할 수 있습니다.

DiaryInput 컴포넌트의 파라미터를 구조 분해 할당을 사용하여 props에서 isLoadingonSubmit을 올바르게 추출해야 합니다.

// DiaryInput 컴포넌트 수정
const DiaryInput = ({ isLoading, onSubmit }) => {
  const [userInput, setUserInput] = useState("");

  // 나머지 코드는 동일하게 유지
};

이렇게 수정하면, isLoadingonSubmit을 props로부터 올바르게 받아와서 컴포넌트 내에서 사용할 수 있게 됩니다. 수정 후 계속 로딩 중인 문제가 해결되어 onSubmit 함수를 통해 GPT API 호출을 정상적으로 수행할 수 있어야 합니다.

이 변경을 적용해보시고, 문제가 지속되면 추가적으로 콘솔에서 오류 메시지를 확인하거나, API 호출 과정에서 발생할 수 있는 에러 핸들링 부분을 더 자세히 살펴보세요.