노마드코더의 ReactJS로 영화 웹 서비스 만들기 코스 중 todolist 만드는 방법을 따라 js 파일 하나로 구현했고, css 파일은 따로 만들지 않았습니다
완성된 js 파일은 게시물 하단에서 확인하세요
https://nomadcoders.co/react-for-beginners/lobby
JSX 부분
js 문법 부분
input 부분
const [input, setInput] = useState("");
const onChange = (e) => setInput(e.target.value);
array 부분
const [Arr, setArr] = useState([]);
const onSubmit = (e) => {
e.preventDeafult();
if(input === "") {
return;
}
setArr = (currentArr) => ([input, ...current]);
setInput("");
}
input에 입력된 string을 배열로 받아오기 위해 Arr의 기본값은 빈 배열로 지정해주었습니다
<form>이 submit되면 onSubmit 함수가 작동할 수 있게 만들었습니다
우선, e.preventDeafult();은 이벤트가 일어나도 현재 화면을 유지하도록 합니다
만약 이렇게 작성하지 않으면 input에 입력을 완료한 후 엔터를 치거나 button을 클릭했을 때 페이지가 새로고침됩니다
if(input === "") {return;}은 input에 아무것도 입력되지 않은 경우 리턴값으로 아무것도 주지 않겠다는 것입니다
이렇게 작성하지 않고 하단의 jsx 부분에서 map을 이용해 <li>를 계속 만들어낼 경우 아래와 같이 아무것도 입력되지 않은 <li>가 화면에 출력됩니다
setArr = (currentArr) => ([input, ...current]); setInput(""); 이 부분을 통해 input이 array로 만들어지도록 합니다
(원하는변수명) => (넣고자하는값, ...원하는변수명) 이렇게 작성하는 것이 규칙입니다
저도 처음에 다른 분들의 코드를 보고 저 ...은 대체 뭘 의미하는 건지 궁금했는데 그냥 저렇게 작성하는 규칙이더라고요
그리고 뒤의 setInput("");은 input에 댓글을 입력 후 엔터나 button을 클릭한 뒤에 input에 작성했던 댓글이 지워지도록 합니다
setInput에 아무런 설정을 하지 않는다면 댓글 입력 후에도 input에 댓글이 그대로 남아있습니다
이렇게 react 부분을 모두 작성 후 해당하는 값이나 함수를 jsx에 작성해줍니다
주의사항
1. <button>의 기본 타입은 submit인데, 위와 같이 input에 엔터를 치면 submit되도록 한다면 굳이 타입을 지정해주지 않거나 type="submit"으로 명시해줄 수 있습니다
이로 인해 "button", "no type", "reset"은 댓글 기능 구현 시 적절하지 않은 타입입니다
이걸 작성하는 이유는,,,, 제가 처음에 아무 생각없이 button에 type="button"을 줬었기 때문입니다,,,
2. <li>를 map을 이용해서 출력되도록 함수를 만들 때, 꼭 key 값을 전달해야 합니다
=> key값을 줘야하는 이유 ?
React는 렌더링 할 때 기존 배열과 새로운 배열을 비교해서 변경된 부분만 다시 렌더링하기 때문에,
요소가 변경되었을때 더 빠르고 효율적으로 렌더링 하기 위해 요소 고유의 key 값을 줘야 합니다
완성된 js 파일
Resources
'Learning Log > React' 카테고리의 다른 글
[react] 드롭다운 메뉴 만들기 (0) | 2023.02.15 |
---|---|
[react] fetch와 async-await (0) | 2023.02.09 |
[react] 클릭 시 보여주는 메뉴 구현하기 + 상수데이터 사용법 (0) | 2023.02.04 |
[react] 검색 기능 구현하기 + mock 데이터 사용법 (0) | 2023.02.03 |
[react] react 기초 개념 (0) | 2023.01.16 |