넘 재밌당
// app.js
function App() {
const [toDo, setToDo] = useState("");
const onChange(event) => setToDo(event.target.value);
return (
<div>
<input
vlaue={toDo}
onChange={onChange}
type="text"
placeholder="Write your to do.."
/>
</div>
)
}
input
의 값을 받아올 toDo
, onChange
이벤트가 발생하면 toDo
의 값을 변경해줄 setToDo
설정input
의 값을 form
내부로 추가해주기// app.js
function App() {
const [toDo, setToDo] = useState("");
const onChange(event) => setToDo(event.target.value);
return (
<div>
<form>
<input
vlaue={toDo}
onChange={onChange}
type="text"
placeholder="Write your to do.."
/>
<button>Add To Do</button>
</form>
</div>
)
}
<button>Add To Do</button>
버튼을 클릭하면 submit
이벤트를 발생시켜 리스트에 추가해주자submit
의 기본 이벤트 제거해주기const onSubmit = (event) => {
event.preventDefault(); <<<----
if(toDo === "") {
return;
}
setToDo("");
};
return (
<div>
<form onSubmit={onSubmit}> <<<----
event.preventDefault();
함수로 기본 이벤트를 제거해주고,input
에 submit
이벤트가 발생하면 setToDo
로 toDo 비워주기로!const [toDos, setToDos] = useState([]);
const onSubmit = (event) => {
event.preventDefault(); <<<----
if(toDo === "") {
return;
}
setToDos((cureentArray) => [toDo, ]);
setToDo("");
};
cureentArray
으로 현재 state를 받아오자const [toDos, setToDos] = useState([]);
const onSubmit = (event) => {
event.preventDefault(); <<<----
if(toDo === "") {
return;
}
setToDos((cureentArray) => [toDo, ...cureentArray]); <<<----
setToDo("");
};
[toDo, ...cureentArray]
[toDo, array(0)]
처럼 array 안에 또 다른 array가 생기는 것! map()
함수를 사용하여 array 에 추가한 element 들을 각각 component 로 만들자map()
함수[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’].map(() => “:)”)
[‘:)’, ‘:)’, ‘:)’, ‘:)’, ‘:)’ ‘:)’]
[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’].map((item) => item.toUpperCase())
[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’]
li
태그를 사용해 리스트로 보이게 하자!return (
<div>
<h1>My To Dos ({toDos.length})</h1>
<form onSubmit={onSubmit}>
<input
...
/form>
<hr />
<ul>
{toDos.map((item, index)) =>
<li key={index}>{item}</li> )} <<<----
</ul>
)
{toDos.map((item, index))
{{item},{item},{item}...}
여러 li로 구성된 배열을 만들어 각자 고유의 key를 가지게 해야한다.그럼 완성! 😎