넘 재밌당
// 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를 가지게 해야한다.그럼 완성! 😎