728x90
1. Done
1.1 포폴앱 성능최적화 계획잡기
별도 문서로 정리: https://handsome-parcel-51e.notion.site/1-1044e2798c5f49838dd87e39eb2640cc
2. 타입스크립트 - ref로 사용자 입력 받기 (state 양방향 바인딩 안 쓰는 경우)
const todoOnSubmit = (e: React.FormEvent) => {
e.preventDefault();
};
event 객체의 타입은 react.FormEvent 이다.
useRef
- useRef 호출
- ref 타입 할당 (HTMLInputElement)
- 초기값 null 할당 (useRef()가 jsx 리턴문보다 위에 있어 최초 렌더링 시 아직 jsx가 렌더링 되지 않았으므로)
- reference 값을 DOM 요소에 적용
- 이벤트 핸들러 정의
import React, { useRef } from 'react';
const AddTodo: React.FC = () => {
const textInputRef = useRef<HTMLInputElement>(null);
const todoOnSubmit = (e: React.FormEvent) => {
e.preventDefault();
const enteredText = textInputRef.current!.value;
};
return (
<form onSubmit={todoOnSubmit}>
<div>
<label htmlFor="todo-text">
<input type="text" id="todo-text" ref={textInputRef} />
</label>
</div>
<button type="submit">할 일 추가</button>
</form>
);
};
export default AddTodo;
3. 타입스크립트 - useState 사용하기
- 별도 파일에 state의 인터페이스 정의
- useState 호출하면서 제네릭으로 타입을 넘겨주기
// todo.model.ts
export interface Todo {
id: string;
text: string;
}
// App.tsx
import React, { useState } from 'react';
import TodoList from './components/TodoList';
import AddTodo from './components/AddTodo';
import { Todo } from './todo.model';
const App: React.FC = () => {
const [todos, setTodos] = useState<Todo[]>([]);
const todoAddHandler = (text: string) => {
setTodos(prev => [...todos, { id: Math.random().toString(), text }]);
};
return (
<div className="App">
<AddTodo onAddTodo={todoAddHandler} />
<TodoList items={todos} />
</div>
);
};
export default App;
728x90
'기록 > Today I learned' 카테고리의 다른 글
22.11.10 목 TIL (0) | 2022.11.10 |
---|---|
22.10.27 TIL - 포폴앱 타입스크립트 마이그레이션 (0) | 2022.10.29 |
22.10.25 TIL (0) | 2022.10.25 |
22.10.24 TIL (0) | 2022.10.24 |
22.10.21 TIL (0) | 2022.10.21 |