React와 Typescript로 Todos 앱만들기를 공부하던 중 오류 발생!
오류 코드
import { useRef, useState, useEffect } from 'react';
import { Todo } from './Type';
import './App.css';
import Editor from './components/Editor';
import TodoItem from './components/TodoItem';
function App() {
const [todos, setTodos] = useState<Todo[]>([])
const idRef = useRef(1)
const onClickAdd = (text:string) => {
setTodos([
...todos,
{
id : idRef.current++,
content : text
},
])
}
useEffect(()=> {
console.log(todos)
},[todos])
return (
<div className='App'>
<h1>Todo</h1>
<Editor onClickAdd = {onClickAdd}/>
<div>
{todos.map((todo)=> {
<TodoItem key={todo.id} {...todo}/>
})}
</div>
</div>
);
}
export default App;
- map을 이용해 todos 리스트의 todo 항목들을 하나씩 TodoItem으로 Props 해주려는데 오류가 발생했다
- 눈 씻고 찾아봐도 다른 오류는 못찾겠어서 결국 GPT님께 찾아갔다
지선생님 답변
- 화살표 함수에 중괄호 { } 를 사용하면 명시적으로 return을 사용해야 한다
- return 을 사용하지 않으면 암묵적으로 undefined를 반환!
- return을 쓰기 싫다면 중괄호 { } 대신 괄호 ( )로 사용하면 된다!
수정된 코드
import { useRef, useState, useEffect } from 'react';
import { Todo } from './Type';
import './App.css';
import Editor from './components/Editor';
import TodoItem from './components/TodoItem';
function App() {
const [todos, setTodos] = useState<Todo[]>([])
const idRef = useRef(1)
const onClickAdd = (text:string) => {
setTodos([
...todos,
{
id : idRef.current++,
content : text
},
])
}
useEffect(()=> {
console.log(todos)
},[todos])
return (
<div className='App'>
<h1>Todo</h1>
<Editor onClickAdd = {onClickAdd}/>
<div>
{todos.map((todo)=> (
<TodoItem key={todo.id} {...todo}/>
))}
</div>
</div>
);
}
export default App;
결과
- 중괄호만 괄호로 수정했는데 바로 오류 해결!
- 화살표 함수 쓸 때 습관처럼 중괄호를 쓰는데 주의해야겠다!
'개발새발개발 > React' 카테고리의 다른 글
[React] VSCode Prettier 적용 안됨 5가지 해결 방법 (2) | 2025.02.13 |
---|---|
[React+Typescript] Todos 앱 만들기 (0) | 2025.02.11 |
[React] state, 이벤트핸들러 통합하기 (0) | 2025.02.06 |
[React] State와 props, 회원가입 정보 받기(input) (0) | 2025.02.05 |
[React] State, setState (0) | 2025.02.04 |
댓글