import { useEffect, useState } from "react";
function App() {
const [todo, setTodo] = useState("");
const [todos, setTodos] = useState([]);
const onChange = (event) => setTodo(event.target.value);
const onSubmit = (event) => {
event.preventDefault();
if (todo === "") {
return;
}
setTodo("");
setTodos((currentArray) => [todo, ...currentArray]);
}
console.log(todos);
return <div>
<h1> My To Do ({todos.length})</h1>
<form onSubmit={onSubmit}>
<input
value={todo}
onChange={onChange}
type="text"
required
placeholder="Write your To Do...">
</input>
<button> Save </button>
<hr />
{todos.map((todo,index) => <li key={index}>{todo}</li>)}
</form>
</div>;
}
export default App;
![]() |
state를 직접 수정하지 않고 함수를 통해 수정한다.
const [toDo, setToDo]
toDO = "" -- 이렇게 사용하지 않아
setTodo("") -- 함수를 수정해서 state를 변경
수정할 때 함수를 이용하는 방법은 2가지!
1. 값을 직접 입력하는 방법 setTodo("");
2. 함수를 보내서 입력하는 방법 setToDos ((currentArray) => [toDo, ...currentArray]);
ㄴ 함수 보낼 때 react.js는 현재 state를 첫번째 arument로 보낸다.
ex ) setToDos( [] => [hello, []) === [hello]
stToDos ( [hello] => [hi, [hello]) === [hi, hello]
* array에 새로운 요소 추가
| 6을 food array에 추가하고 싶은 경우 [6, ...food] |
![]() |
* map() 기존 array의 요소들을 바꿀 수 있다.
map(함수) - 기존 array 요소 하나하나가 함수에 적용, return된 값이 새로운 array에 들어간다.
(기존 array 요소가 4개면 함수 4번 발동!)
기존 요소를 가져와 함수에 적용하고 새로운 array로 변형할 수 있다.
![]() |
todos에 있는 요소(item)을 map을 활용해 가져와 각각 <li> 형태로 만들어주면 된다.
[삭제기능 만들어보기]
<li key={index}>
1. index를 활용해서 삭제가 가능하다. onClick함수로 Index 전달
2. filter함수 사용으로 array 재생성
import { useEffect, useState } from "react";
function App() {
const [todo, setTodo] = useState("");
const [todos, setTodos] = useState([]);
const onChange = (event) => setTodo(event.target.value);
const onSubmit = (event) => {
event.preventDefault();
if (todo === "") {
return;
}
setTodos((currentArray) => [todo, ...currentArray]);
setTodo("");
};
const onClick = (index) => {
setTodos(todos.filter((item,todoIndex) => index!==todoIndex));
}
return (
<div>
<h1> My To Do ({todos.length})</h1>
<form onSubmit={onSubmit}>
<input
value={todo}
onChange={onChange}
type="text"
placeholder="Write your To Do...">
</input>
<button> Save </button>
<hr />
<ul>
{todos.map((item, index) =>
<li key={index}> {item} <button onClick={() => onClick(index)}>❌</button>
</li>
)}
</ul>
</form>
</div>
);
}
export default App;
'프론트엔드 > react' 카테고리의 다른 글
| React (11) - API #1 await (0) | 2023.04.27 |
|---|---|
| React (10) - USDtoCOIN Converter, API (0) | 2023.04.27 |
| React (8) - Effects #2 [cleanup] (0) | 2023.04.24 |
| React (8) - Effects #1 (0) | 2023.04.24 |
| React (7) - Create React App Install for mac (0) | 2023.04.24 |


