반응형
공휴일 쉬고 오니까 그새 다 잊어버렸다. 실습 망해서 처음부터 다시 복습하기.
아.. 강의 들어야 되는데 오늘은 복습만 싹 하고 내일부터 주말 다 쓰는걸로..
Input (추가)
- input 은 value 와 onChange 를 사용한다.
- input type은 text고 value 는 name(국가명), onChange 가 발생하면 setName(새로운이름)을 input(target) 창에 value(입력값)을 변경해준다.
- handleAddCountry 라는 함수를 만들고 event 가 일어나면 event.preventDefault 폼 제출 시 기본 동작(새로고침)을 막는다.
- newCountries 새로운 객체 함수(id,name,gold,silver,bronze)를 만들고 setCountries를 실행한다
- setCountries 를 실행할 때, ...countries 기존 배열과 newCountries를 추가하여 새로운 배열로 업데이트하여 실행한다
const handleAddCountry = (event) => {
event.preventDefault();
const newCountries = {
id: new Date().getTime(),
name: name,
gold: gold,
silver: silver,
bronze: bronze,
};
setCountries([...countries, newCountries]);
<input type="text" value={name} onChange={function (c) {
setName(c.target.value);
}}
Update
- handleUpdateCountry 이벤트 발생시 새로고침 방지
- countries 에서 find로 업데이트 할 국가를 찾을 때 순회할 때 찾은 name 과 기존 name 이 같다면 targetCountry로 넘김
- 만약 countries.map으로 순회했을 때, 순회할 때 찾은 이름과 위에 업데이트 할 국가 이름이 같다면
- ...countries 기존 배열을 유지하고, 새로운 gold,silver,bronze 값으로 덮어씌운다.
- else 아니면 기존 배열을 유지한다.
- setCountries 새로운 배열을 실행하는데 newCountries 로 업데이트해서 실행한다.
* find() 메서드는 순회해서 조건을 첫번째로 만족하는 나라를 저장한다.
const handleUpdateCountry = (event) => {
event.preventDefault();
const targetCountry = countries.find((c) => c.name === name); // 여기서 업데이트 할 국가 이름 찾았음
const newCountries = countries.map((countries) => { // 여기서 새로운 객체를 (newCountries) 순회해서 찾고있음
if (countries.name === targetCountry.name) { // 만약 순회해서 찾은 이름과 위에 업데이트 할 국가 이름이 같으면
return { // ...countries (기존 배열에) 새로운 메달 숫자를 추가해라.
...countries,
gold,
silver,
bronze,
};
} else {
return countries;
}
});
setCountries(newCountries);
resetForm();
};
Delete
- countries.filter 로 순회하여 찾은 id 와 삭제하려는 id가 같지 않은 경우, 같지 않은 id만 남겨두고 나머지는 삭제해라
- setCountries 를 실행할 때 filterCountry 로 업데이트하여 실행
- button을 누르면 onClick 이벤트가 발생하고 클릭된 국가의 id를 handleDeleteCountry 함수에 전달
const handleDeleteCountry = (id) => {
const filterCountry = countries.filter((c) => {
return c.id !== id;
});
setCountries(filterCountry);
};
<button onClick={() => handleDeleteCountry(c.id)}>삭제</button>
Read
- sort 로 금메달이 많은 순으로 정렬
- map 으로 countries를 순회하여 해당 data를 각 구역별로 출력
<tbody>
{countries
.sort((a, b) => b.gold - a.gold)
.map((data) => {
return (
<tr key={data.id}>
<td>{data.name}</td>
<td>{data.gold}</td>
<td>{data.silver}</td>
<td>{data.bronze}</td>
<td>
<button onClick={() => deleteHandler(data.id)}>
삭제
</button>
</td>
</tr>
);
})}
</tbody>
오늘 이것만 지웠다 썼다를 계속 반복중이다.
진짜 이해가 안가서 튜터님을 찾아갔다가 반응이 없으셔서 마음 고쳐먹고 다시 혼자 노력중...
반응형
'코딩 > React 본 캠프' 카테고리의 다른 글
[본 캠프 26일차] React 숙련 1주차 강의 redux (0) | 2024.08.20 |
---|---|
[본 캠프 25일차] 코드카타 + 스탠다드반 4차 수업 + React 숙련 1주차 강의 (0) | 2024.08.19 |
[본 캠프 23일차] React 스탠다드 강의, 1차 과제 (0) | 2024.08.14 |
[본 캠프 22일차] React 입문 개인과제 마지막날 (0) | 2024.08.13 |
[본 캠프 21일차] React 스탠다드 + React 입문 개인과제 (0) | 2024.08.12 |