인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

강의 및 강사 소개

[해결완료] TodoItem을 import했지만, 코드에서 사용하지 않아서 발생하는 ESLint 경고

해결된 질문

작성

·

117

·

수정됨

1

  • 한 입 크기로 잘라먹는 리액트 책 잘 보고 있습니다.

  • 카운터앱 프로젝트는 완료 후,

    두 번째 할 일 관리 앱 실행 중에 문제가 발생해서 문의드려요.

  •  

  •  

    image.png



    1. 문제 : 326쪽까지 문제없이 잘 실행이 되었는데,
    327쪽 <div>{it.content}</div>
    이 코드를 넣었을때부터 327쪽 책과 동일하게 코드 넣었는데, 에러 문구가 아래처럼 나왔어요.

  •  

WARNING in [eslint] src\component\TodoList.js Line 1:8: 'TodoItem' is defined but never used no-unused-vars webpack compiled with 1 warning

 

image.png

 

TodoItem을 import했지만, 코드에서 사용하지 않아서 발생하는 ESLint 경고인 것 같은데,

{todo.map((it) => ( <TodoItem key={it.id} content={it.content} /> ))}
여기서
TodoItem이 개별 할 일을 나타내는 컴포넌트라고 가정하고 content를 props로 전달했습니다.
(이때,
key 값으로 it.id를 사용하여 React에서 리스트 렌더링 최적화를 도와야 합니다.)
파란색 부분과 같은 조언을 받아 코드를 수정했더니 npm run start 실행하면 서버에서 지금까지 한 모든 화면이 안 보이고 백지화 되었어요. ㅠㅠ

 

기존에 html5로 이펍3 만들기 조금 배웠고, css개념 어느 정도 이해하는 수준의 초보인데,

책 보고 프로젝트1 마치고, 프로젝트2도 거의 다 와가서 재미있게 하는 중에 날벼락이 ㅠㅠ;

 

혼자서는 도저히 해결이 안 될 거 같아서 강의등록 후 문의드려요.. 초보라 문의도 이렇게 하는게 맞는지 모르겠네요.

답변 부탁드릴게요~

 

참고 todoeditor.js return 이하

image.png

App.js

 

import "./App.css";
import Header from "./component/Header";
import TodoEditor from "./component/TodoEditor";
import TodoList from "./component/TodoList";
import { useState, useRef } from "react";

const mockTodo = [
  {
    id: 0,
    isDone: false,
    content: "React 공부하기",
    createDate: new Date().getTime(),
  },
  {id: 1,
    isDone: false,
  content: "빨래 널기",
  createDate: new Date().getTime(),
  },
  {id: 2,
    isDone: false,
  content: "노래 연습하기",
  createDate: new Date().getTime(),
  },
];

function App() {
  const idRef = useRef(3);
  const [todos, setTodos] = useState(mockTodo);

const onCreate = (content) => {
  const newItem = {
    id: idRef.current,
    
    content,
    isDone: false,
    createDate: new Date().getTime(),
  };
  setTodos([newItem,...todos]);
  idRef.current += 1;
};

   return (
  <div className="App">
    <Header />
    <TodoEditor onCreate={onCreate} />
    <TodoList todos={todos}/>
  </div>
  );
}
export default App;

 

 

답변 4

1

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

image.png

App 컴포넌트에서는 todos 라는 이름으로 Props를 전달하고 있지만, TodoList 컴포넌트에서는 todo 라는 이름으로 전달받고 있군요 이 부분 수정하시면 문제 해결될 것 으로 보입니다.

 

ㄱ.북베어 김지은(자유의 길)님의 프로필 이미지

image.png

우선 App.js와 Todolist.js 모두 todo로 통일했는데,

src\App.js

Line 46:21: 'todo' is not defined no-undef

위 오류가 나와요. ;; 이메일로 전체 파일 패키징해서 보내드렸었는데...

혹시. 이 외에 다른 문제가 있는 걸까요?? ;;;

image.png



이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

App 컴포넌트에 State 이름을 todos로 선언하시지 않았나요? 그럼 todo가 아닌 todos로 다 변경해주셔야 맞습니다. 변수 명은 todos인데 todo를 사용하고 계시니 오류가 발생하는걸로 보입니다.

ㄱ.북베어 김지은(자유의 길)님의 프로필 이미지

넵넵 고맙습니다. 아까는 todos로 해서 에러 나왔었는데, 지금 다시 하니 되네요? ㅎㅎ메일과 인프런 댓글로 여러 번 바로바로 피드백 주셔서 너무 고맙습니다!

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다.

글을 수정해주셨는데요, 그럼에도 공유해주신 제한적인 정보만으로는 정확한 문제의 원인이 어렵습니다. 정확히 어떤 지점에 오류가 발생한 것인지 찾아내기 위해서는 전체 프로젝트의 코드가 필요합니다. 이에 전체 프로젝트 코드를 깃허브 또는 구글드라이브에 업로드 하신 다음, 링크로 답글 달아주시면 확인해보겠습니다!

0

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

안녕하세요 이정환입니다

우선 처음에 나타난 Warning 메세지는 기능상 영향을 주지 않으므로 무시하셔도 괜찮습니다!

메세지를 자세히 읽어보시면 “TodoItem 컴포넌트가 선언되었지만, 사용은 되고 있지 않다” 라고 나와있는데요 이는 혹여나 개발자가 불필요한 변수나 컴포넌트를 정의할 경우 알리는 목적으로 발생되는 경고라고 생각하시면 됩니다.

그런데 그 이후에 수정하신 부분으로 인해 현재 화면이 정상적으로 렌더링되고있지 않다고 하셨는데요, 현재 공유주신 정보 만으로는 문제의 원인을 제대로 파악하기 어려우므로 전체 프로젝트 코드를 깃허브 또는 구글드라이브를 통해 링크로 답글 달아주시면 확인해보겠습니다

ㄱ.북베어 김지은(자유의 길)님의 프로필 이미지

https://github.com/bookbear1/onebite_react.git

깃헙도 처음이라 이게 맞는지 모르겠는데 우선 올려봅니다.

이정환 Winterlood님의 프로필 이미지
이정환 Winterlood
지식공유자

image.png

보내주신 링크로 들어가보면, Empty 상태로 보이네요 ㅠㅠ 코드 업로드를 하지 않으신 것 같아 보입니다.

어려우시다면 그냥 king199777@gmail.com 으로 현재 프로젝트 코드를 압축 파일로 보내주세요!

0

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

안녕하세요, 인프런 AI 인턴입니다. ㄱ.북베어 김지은(자유의 길)님.

리액트 프로젝트에서 TodoItem을 import한 후 사용되지 않은 경우, ESLint는 사용하지 않은 변수를 경고로 표시합니다. 그리고 만약 수정을 시도했으나 화면이 백지로 나타나는 것은 종종 JavaScript 코드상의 오류나 컴포넌트의 문제 때문일 수 있습니다.

해결 방안:

  1. 컴포넌트 사용 확인: TodoItem 컴포넌트를 사용하지 않는 경우에는 import 구문을 제거하여 경고 메시지를 없앨 수 있습니다. 하지만, 컴포넌트를 사용하고 싶으시면 아래에서 설명하는 방법처럼 설정하세요.

  2. 리스트 렌더링 설정:

    {todo.map((it) => (
     <TodoItem key={it.id} content={it.content} />
    ))}
    

    위 코드는 TodoItem 컴포넌트를 사용하여 todo 리스트의 각 항목을 렌더링합니다. key 속성은 각 요소가 고유함을 보장하기 위해 필수적입니다. 꼭 it.id가 고유한 값을 갖고 있는지 확인하세요.

  3. 백지 화면 문제 해결:

    • Console 오류 확인: 브라우저의 개발자 도구(주로 F12 키)를 열고 콘솔(Console) 탭에 오류가 표시되어 있는지 확인하세요. 에러 메세지는 문제가 무엇인지 이해하는데 많은 도움이 될 것입니다.
    • 코드 복구: 최근에 변경된 코드의 백업을 되돌려 원래 상태에서 문제가 발생하는지 확인하세요. 문제가 있는 컴포넌트를 하나씩 주석처리하고 재실행하여 어느 부분에서 문제인지 꼼꼼하게 분리해서 확인해 보세요.

이전 유사한 문제에 대한 해결책으로는 아래 답변을 참조하시면 좋겠습니다:
- 투두 리스트 렌더링하기 - 리스트 렌더링 이슈 및 데이터 전달 관련 조언

위의 방법으로도 해결이 안 된다면, 코드의 문제되는 부분을 좀 더 자세히 공유해주시면 도움을 드리기가 더 쉬울 것 같습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.