import { useState } from "react";
function App() {
const [toDo, setTodo] = useState("");
const onChange = (event) => setTodo(event.target.value);
// console.log(toDo);
const onSubmit = (event) => {
event.preventDefault();
console.log(toDo);
};
return (
<div>
<form onSubmit={onSubmit}>
<input
onChange={onChange}
value={toDo}
type="text"
placeholder="Write your to do..." />
<button>Add To Do</button>
</form>
</div>
);
}
export default App;

*event.preventDefault
어떤 이벤트를 명시적으로 처리하지 않은 경우,
해당 이벤트에 대한 사용자 에이전트의 기본 동작을 실행하지 않도록 지정.
const [toDos, setTodos] = useState([]);
const onChange = (event) => setTodo(event.target.value);
const onSubmit = (event) => {
event.preventDefault();
if (toDo === ""){
return;
}
// toDo="" or toDo.pust() (X)
// 우리는 state를 직접적으로 수정하지 않음.
setTodo(""); //직접적으로 수정하는 방법
//함수를 안에 넣는 방법
// 첫번째 인자: current state
// 두번째 인자: previous
setTodos((currentArray) => [toDo, ...currentArray]);
};
array를 직접적으로 수정하지 않으면서 setToDos로 array에 element를 추가하는 방법
...[currentArray]
쉽게 말해서 currentArray += toDo 이런 느낌이라고 생각하면 됨

리액트에서 JS 사용하고 싶다면 {} 안에 써줘야 함.
react's map
map 안에 넣은 function의 return 값이 array에 들어가게 됨.
array에 있는 item을 무엇이든 원하는 것으로 바꿔준다.
map 함수의 첫번째 argument: 현재의 item 가져올 수 있음.
map 함수의 첫번째 argument가 진행되고 있는 순서에 맞는 item인 것.
return 값이 어떻든 그 값이 새로운 array에 들어가게 됨.
=예전 array를 가져와서 번형
array의 component return 하는 방법?
<ul>
{toDos.map((item) => (
<li>{item}</li>
))}
</ul>

추가는 되지만 콘솔창에서 문제가 생김.
"key" prop이 없다는 경고 표시
<ul>
{toDos.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
key 설정
데이터가 가진 고윳값을 key값으로 설정. why? key 값은 언제나 유일해야 하기 때문.
컴포넌트에 고유 번호가 없을 시 map 함수에 전달되는 콜백 함수의 인수인 index 값을 사용하면 됨.
고유한 값이 없을 때만 index의 값을 key로 사용해야 함.
full code
cf) 유동적인 데이터 렌더링
concat 사용하여 데이터 추가 기능
filter 함수 사용, 항목 더블 클릭하여 데이터 제거
'FE > React & TS' 카테고리의 다른 글
[REACT] "Coin Tracker" fetch / useEffect / map / api data (0) | 2023.05.10 |
---|---|
[REACT] Event (0) | 2023.05.09 |
[REACT] component / state / useEffect (0) | 2023.05.08 |
[REACT] create-react-app (0) | 2023.05.08 |
[REACT] propTypes (0) | 2023.05.08 |