Todo Input에서 input값 가져와서 App에 update하기.
//TodoInput.tsx import React, { useState } from "react"; const TodoInput: React.FC = () => { const [input, setInput] = useState(""); const handleClick = () => { console.log(input); setInput(""); }; return ( <div className="inputBox"> <input type="text" onChange={(e) => setInput(e.target.value)} value={input} /> <button onClick={handleClick}>Add Todo</button> </div> ); }; export default TodoInput;
//App.tsx {...생략} const updateTodo: UpdateTodo = (value) => { if (value === "") { alert("값을 입력해주세요"); } else { setTodos([...todos, { text: value, completed: false }]); } }; {...생략}
타입 설정하기
//type.d.ts type UpdateTodo = (value: string) => avoid;
react-icons는 타입스크립트 지원안함.. Native 만 지원해서 FontAwesome을 사용하기로함.
공홈 사이트 : https://fontawesome.com/v5.15/how-to-use/on-the-web/using-with/react
yarn add @fortawesome/fontawesome-svg-core @fortawesome/free-solid-svg-icons @fortawesome/react-fontawesome
fortawesome 주의!!!!!!!!!!!!!
//Icon.tsx import { IconLookup, IconDefinition, findIconDefinition, } from "@fortawesome/fontawesome-svg-core"; import { library } from "@fortawesome/fontawesome-svg-core"; import { fas } from "@fortawesome/free-solid-svg-icons"; library.add(fas); const trashLookup: IconLookup = { prefix: "fas", iconName: "trash" }; export const trashIconDefinition: IconDefinition = findIconDefinition(trashLookup);
Tip : https://www.digitalocean.com/community/tutorials/how-to-use-font-awesome-5-with-react [폰트어썸 사용하는 꿀팁 / prefix]
//App.tsx const deleteTodo: DeleteTodo = (selected) => { setTodos(todos.filter((todo) => todo.text !== selected.text)); };
type 설정하기.
//types.d.ts type DeleteTodo = (selected: Todo) => avoid;
const initialTodo: Array<Todo> = []; const App: React.FC = () => { const [todos, setTodos] = useState(initialTodo); {...생략} }
Tip: state에서 바로 타입설정 불가함. 변수로 빼서 타입 설정해주고 state 초기값으로 넣어야 함.